Автор Тема: pthread Въпрос  (Прочетена 800 пъти)

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
pthread Въпрос
« -: May 21, 2009, 10:53 »
От няколко дена чета за синхронизиране на нишки които ползват споделена памет.

имам следната постановка
нишка 1 writer
нишка от 2 до n readers

Трябва когато writer-a запише нещо в паметта всички readers да го прочетат едновременно и да пратят данните през сокет.

Код
GeSHi (C++):
  1. int readcount = 0;
  2. semaphore wsem = 1; //
  3. semaphore x = 1; //
  4.  
  5. void writer(){
  6.  while(1){
  7.      if ((n=recv(udp_sock,&command,200,MSG_NOSIGNAL)) < 1) break;
  8.      wait(wsem);
  9.      doWriting(command,n);
  10.      signal(wsem); /* И ето тук е проблема виж 1.*/
  11.   }
  12. }
  13.  
  14. void reader(){
  15.   while(1){
  16.      wait(x);
  17.        readcount++;
  18.        if (readcount==1)
  19.             wait(wsem);
  20.      signal(x);
  21.      doReading();
  22.      wait(x);
  23.        readcount--;
  24.        if (readcount==0)
  25.             signal(wsem);
  26.      signal(x);
  27.  
  28.      send_data();
  29.  
  30.   }
  31. }
  32.  

1. Получава се така, че след сигнал от writer-a <signal(wsem)>, ако няма 'usleep(some_time)' readers нямат време да заключат семафора и writer-a продължава сам в цикъла си. Ако някой се е сблъсквал с такава постановка ако може да ме посъветва нещо.

П.С. Много ще е добре ако може да ми предложите и добре литература за pthread програмиране
П.С.2 Също така ако някой е ползвал thread_cond_wait() и thread_cond_signal() да сподели дали е по-ефективен метод
Активен

Emooo

  • Гост
Re: pthread Въпрос
« Отговор #1 -: May 21, 2009, 15:33 »
Специално за синхронизацията трябва да се прочете първо преди да се пише код. Не ми се занимава да чета кода от горе но съм 100% сигурен че си един от многото които попадат на 3те проблема описани тук. http://en.wikipedia.org/wiki/Readers-writers_problem#The_second_readers-writers_problem
На тази страница има линкове към други синхронизациони проблеми чети истината е някъде там.
« Последна редакция: May 21, 2009, 15:36 от Emooo »
Активен

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: pthread Въпрос
« Отговор #2 -: May 21, 2009, 16:01 »
Това и още доста неща съм изчел преди да пиша, просто исках мнение на някой който вече се е сблъсквал с такъв проблем.
Активен