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作業:
は、ここで私が働いているコードです。
コードに問題はありますか?
私はあなたがプロセス間共有の可能性があるために共有メモリにミューテックスを割り当てる必要があると思います。プロセスでコードを共有するミューテックスを特定する方法はありません。 – molbdnilo