От няколко дена чета за синхронизиране на нишки които ползват споделена памет.
имам следната постановка
нишка 1 writer
нишка от 2 до n readers
Трябва когато writer-a запише нещо в паметта всички readers да го прочетат едновременно и да пратят данните през сокет.
GeSHi (C++):
int readcount = 0;
semaphore wsem = 1; //
semaphore x = 1; //
void writer(){
while(1){
if ((n=recv(udp_sock,&command,200,MSG_NOSIGNAL)) < 1) break;
wait(wsem);
doWriting(command,n);
signal(wsem); /* И ето тук е проблема виж 1.*/
}
}
void reader(){
while(1){
wait(x);
readcount++;
if (readcount==1)
wait(wsem);
signal(x);
doReading();
wait(x);
readcount--;
if (readcount==0)
signal(wsem);
signal(x);
send_data();
}
}
1. Получава се така, че след сигнал от writer-a <signal(wsem)>, ако няма 'usleep(some_time)' readers нямат време да заключат семафора и writer-a продължава сам в цикъла си. Ако някой се е сблъсквал с такава постановка ако може да ме посъветва нещо.
П.С. Много ще е добре ако може да ми предложите и добре литература за pthread програмиране
П.С.2 Също така ако някой е ползвал thread_cond_wait() и thread_cond_signal() да сподели дали е по-ефективен метод