2012-04-28 18 views
-1

pthreadを使用して送受信機能をシミュレートしようとしています。私は次のコードを実装しました。しかし、何度か、それが掛かったり、間違った結果が出たりします。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); 
} 

私はここでミスしたと思いますか?

おかげ

答えて

0

たくさん:)

  • ロックを保持する目的は何ですか?
  • ロックを保持するときにセマフォを待つことはありません。
  • は、常にライブラリ関数の戻り値をチェックします。特に sem_機能は、あなたがそうPOSIXスレッドで経験していない場合 割り込みがsem_wait
  • のために起こった場合は、チェックだけ sem_tを使用していない必要があり、中断されています。代わりにmutexと条件変数を使用してください。それらはより高い レベルのインターフェイスで、アプリケーションコードに適しています。
+0

グローバル変数sharedA、g_sender、g_receiverを他のスレッドから保護するためにロックを使用しています。私はブロッキング送信をシミュレートするためにセマフォを使用します。 – user504453

+0

@ user504453、いずれにしてもあなたのデザインは私にはあまり意味がありません –

関連する問題