-1
我試圖模擬使用pthreads發送和接收功能。我確實實現了下面的代碼。但有時候會掛起或產生錯誤的結果。使用pthreads模擬發送和接收
int g_sender,g_receiver; //global variables to keep track of the sender and receiver
void send(double ** data,int sender,int receiver, int size[],int block_size){
int i;
pthread_mutex_lock(&lock);
for (i=0;i<size[0];i++)
memcpy(sharedA[i],data[i],size[1]*block_size);
g_sender = sender;
g_receiver = receiver;
sem_wait(&sem);
pthread_mutex_unlock(&lock);
}
void receive(double ** data, int sender,int receiver, int size[],int block_size){
int i;
while(!(sender==g_sender && receiver==g_receiver));
for(i=0;i<size[0];i++)
memcpy(data[i],sharedA[i],size[1]*block_size);
g_sender =-1;
g_receiver = -1;
sem_post(&sem);
}
你覺得我在這裏錯過了什麼?
感謝
我正在使用鎖來保護來自其他線程的全局變量sharedA,g_sender,g_receiver,直到從接收器讀取它爲止。我使用信號來模擬阻塞發送。 – user504453 2012-04-28 08:08:35
@ user504453,總之你的設計對我來說沒什麼意義 – 2012-04-28 11:02:09