2017-01-12 8 views
1

現在、pthread_mutexモデルを使用して2つのプロセスをLinuxでsinchronizeしようとしています。私は2つの別々のプロセスを実行するとpthread_mutexベースのプロセス間通信が機能しない

#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 
#include <unistd.h> 

using namespace std; 

int main (int argc, char **argv) 
{ 
    printf ("starting process\n"); 

    if (_POSIX_THREAD_PROCESS_SHARED == -1) { 
     printf ("shared mutex is not supported!\r\n"); 
    } 

    pthread_mutexattr_t attr; 
    pthread_mutex_t shm_mutex; 


    if (pthread_mutexattr_init(&attr) != 0) 
     printf ("init attr error!\r\n"); 
    if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL) != 0) 
     printf ("set type error!\r\n"); 
    if (pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED) != 0) 
     printf ("set shared error!\r\n"); 

    int value; 
    if (pthread_mutexattr_getpshared(&attr, &value) != 0 || value != PTHREAD_PROCESS_SHARED) { 
     printf ("mutex is not shared!\r\n"); 
    } 

    if (pthread_mutex_init(&shm_mutex, &attr) != 0) 
     printf ("mutex init error!\r\n"); 

    for (int i=0; i < 10; i++) { 

     if (pthread_mutex_lock(&shm_mutex) != 0) 
      printf ("lock error!\r\n"); 

     printf ("begin run %d\r\n", i); 
     sleep(10); 
     printf ("end run %d\r\n", i); 

     if (pthread_mutex_unlock(&shm_mutex) != 0) 
      printf ("unlock error!\r\n"); 

     sleep(1); // sleep 1 second 
    } 

    pthread_mutex_destroy(&shm_mutex); 
    pthread_mutexattr_destroy(&attr); 

    return 0; 
} 

は、開始/終了ロジックdoesm't作業:

は、ここで私が働いているコードです。

コードに問題はありますか?

+0

私はあなたがプロセス間共有の可能性があるために共有メモリにミューテックスを割り当てる必要があると思います。プロセスでコードを共有するミューテックスを特定する方法はありません。 – molbdnilo

答えて

3

shm_mutexを共有メモリに自分で割り当てることになっています。 man shm_overviewを参照してください。このフラグは、あなたがmutexでこれを行うことを許可されていることを意味しています。

詳細については、this referenceを参照してください。

関連する問題