Многопоточность стандартными средствами
От: b099ard  
Дата: 01.05.11 15:05
Оценка:
Пытаюсь осуществить сабж, пока ничего не получается.
Программа получает n количество, нет n мало, k количество данных,
строит дерево и время последующей работы с ними должно уложится в 1 секунду.

Пробовал сделать расчет многопоточным, но пользоваться чем то сторонним — низзя, только стандартными средствами,
вот и вопрос как можно расспараллелить работу с этим набором данных?
Пробовал сделать вызовом програмно сам себя, а сообщение между экземплярами осуществлять через пайпы, но не могу создать открыть пайп, как правильно?


void do_child() {  
 int s;  
 while(s=getchar()!=EOF)  
 {   cout << "childget:" << s << endl;  }  
}   

int main(int argc, char **argv)
{  int c;  
 if(argc == 1)  {   
  char arg_list[9] = "params";   
  cout << "try exec fork" << endl;   
  if(fork()!=0)   {    
   cout << "fork ok" << endl;    
   FILE *ifp;   
   string s1 = argv[0];    
   string s2 = arg_list;    
   string cmd = s1 + " " + s2;    
   cout << "popen " << cmd.data() << endl;    
   if((ifp = popen(cmd.data(), "rw")) == NULL){     
       cout << "cant open pipe" << endl;  <------ Ошибка здесь   
       exit(0);    
   }    //assert(ifp!=NULL);    
   cout << "send data " << endl;    
   for(int i=0; i < 6;i++)    
   {     
       int s = arg_list[i];     
       cout << "char: " << (char)s << endl;     
       if(fputc(s, ifp) == EOF){      
        cout << "send error" << endl;      
        exit(1);     
   }     
   cout << "send ok" << endl;    
   }    
   cout << "recived data " << endl;    
   while(getc(ifp)!=EOF)    {     
    cout << c << endl;    
   }    
   pclose(ifp);    
   return 0;   
 }else{    
   do_child();   
 }   
 return 0;  
}else{   
  cerr << "Ops" << endl;   
  do_child();  
  }  exit(1);    
 return 0; 
}

Вывод программы:

argc1 file name./a.out 
try exec fork 
fork ok 
popen ./a.out 
params cant open pipe


p.s.
Пробовал сделать форкнув пару раз экзепляр, а сообщение между дочерними процессами наладить чере шаред меммори
но получаю ошибку сегментации.
Кто знает почему напишите плз.
Re: Многопоточность стандартными средствами
От: LaptevVV Россия  
Дата: 01.05.11 19:58
Оценка:
Здравствуйте, b099ard, Вы писали:

B>Пытаюсь осуществить сабж, пока ничего не получается.

B>Программа получает n количество, нет n мало, k количество данных,
B>строит дерево и время последующей работы с ними должно уложится в 1 секунду.

B>Пробовал сделать расчет многопоточным, но пользоваться чем то сторонним — низзя, только стандартными средствами,

Стандартных средств многопоточности в С++ нет. Можно пользоваться либо API операционной системы, либо сторонними библиотеками...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Многопоточность стандартными средствами
От: b099ard  
Дата: 02.05.11 07:06
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, b099ard, Вы писали:


B>>Пытаюсь осуществить сабж, пока ничего не получается.

B>>Программа получает n количество, нет n мало, k количество данных,
B>>строит дерево и время последующей работы с ними должно уложится в 1 секунду.

B>>Пробовал сделать расчет многопоточным, но пользоваться чем то сторонним — низзя, только стандартными средствами,

LVV>Стандартных средств многопоточности в С++ нет. Можно пользоваться либо API операционной системы, либо сторонними библиотеками...

Тогда только стредствами ОС, сейчас помоему даже мобильник многозадачный
Как бы вот так запустить рекурсивно програмно самому себя и наладить передачу данных между экземплярами.
Точнее надо передача не друг с другом, а между самым первым экземпляром и всеми остальными — не первыми.
Что для этого лучше использовать?
Пока остановился на варианте с именованными каналами.
Re[3]: Многопоточность стандартными средствами
От: MasterZiv СССР  
Дата: 02.05.11 07:57
Оценка:
On 05/02/2011 11:06 AM, b099ard wrote:

> Что для этого лучше использовать?


Не надо "запускать рекурсивно себя" и "налаживать передачу данных".

Используй потоки. Есть POSIX -библиотека pthread, она переносима и её тебе
вполне хватит.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Многопоточность стандартными средствами
От: b099ard  
Дата: 02.05.11 09:11
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>On 05/02/2011 11:06 AM, b099ard wrote:


>> Что для этого лучше использовать?


MZ>Не надо "запускать рекурсивно себя" и "налаживать передачу данных".


MZ>Используй потоки. Есть POSIX -библиотека pthread, она переносима и её тебе

MZ>вполне хватит.

Система тестирования о ней ничего не знает и компилирует программу как обычную,
без подключения сторонних библиотек, может быть это не совсем честно
,но мне остается только либо подключить динамически многопоточность, либо придумать какой нибудь изврат.
Отлаживать алгоритм — влом, а вот заюзать системную многопоточность — вполне по силам
Re[5]: Многопоточность стандартными средствами
От: MasterZiv СССР  
Дата: 02.05.11 18:13
Оценка:
On 02.05.2011 13:11, b099ard wrote:

> Система тестирования о ней ничего не знает и компилирует программу как обычную,

> без подключения сторонних библиотек, может быть это не совсем честно
> ,но мне остается только либо подключить динамически многопоточность, либо
> придумать какой нибудь изврат.
> Отлаживать алгоритм — влом, а вот заюзать системную многопоточность — вполне по
> силам

Что такое "система тестирования", мы не знаем, ты на капу, на капу дави.
pthread очень даже "системная многопоточность".
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Многопоточность стандартными средствами
От: b099ard  
Дата: 03.05.11 06:16
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>On 02.05.2011 13:11, b099ard wrote:


>> Система тестирования о ней ничего не знает и компилирует программу как обычную,

>> без подключения сторонних библиотек, может быть это не совсем честно
>> ,но мне остается только либо подключить динамически многопоточность, либо
>> придумать какой нибудь изврат.
>> Отлаживать алгоритм — влом, а вот заюзать системную многопоточность — вполне по
>> силам

MZ>Что такое "система тестирования", мы не знаем,

Я тоже не вкурсе

MZ>pthread очень даже "системная многопоточность".

В c/c++ многопоточности нет — с этим согласен
Re[4]: Многопоточность стандартными средствами
От: Sorc17 Россия  
Дата: 03.05.11 07:07
Оценка: +1 :)
Здравствуйте, MasterZiv, Вы писали:

MZ>On 05/02/2011 11:06 AM, b099ard wrote:


>> Что для этого лучше использовать?


MZ>Не надо "запускать рекурсивно себя" и "налаживать передачу данных".


MZ>Используй потоки. Есть POSIX -библиотека pthread, она переносима и её тебе

MZ>вполне хватит.

Всего скорей, когда (препод?) увидит -lpthread то сделает а-та-та
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.