共有メモリにミューテックスを作成するという簡単な作業を試みています。共有メモリのセクションを宣言し、int*
.
int *mutex;
// allocate shared memory for mutex
if ((shmid2 = shmget(IPC_PRIVATE, 4, IPC_CREAT | 0666)) < 0) {
printf("Could not allocate shared memory for mutex: %d.\n", errno);
exit(errno);
}
if ((mutex = shmat(shmid2, NULL, 0)) == (int*)-1) {
printf("Could not attach shared memory for mutex: %d\n", errno);
exit(errno);
}
// set the mutex to one
mutex[0] = 1;
ここで、ミューテックスのロックとロック解除に囲まれたクリティカル セクションを定義しようとしています。(多くの子プロセスの 1 つの内部)。
while (*mutex == 0) ;
mutex[0] = 0;
// critical section
...
// end critical section
mutex[0] = 1;
ただし、この手法は機能せず、2 つの子プロセスが同時に重要なセクションに入ることができますが、問題はほとんどありません (非常に頻繁に発生します)。したがって、pthreads を使用せずに、これを修正するために何ができるのか疑問に思っています。