Jor*_*les 1 c concurrency mutex
我正在尝试在共享内存中创建互斥锁的简单任务.我有以下代码来声明共享内存的一部分,并将其附加到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;
Run Code Online (Sandbox Code Playgroud)
现在,我尝试定义一个关键部分,包围锁定和解锁互斥锁.(在许多子进程之一内).
while (*mutex == 0) ;
mutex[0] = 0;
// critical section
...
// end critical section
mutex[0] = 1;
Run Code Online (Sandbox Code Playgroud)
但是,我发现这种技术不起作用,两个子进程可以同时进入临界区,没有太多问题(经常发生).所以我想知道如何在不使用pthread的情况下解决这个问题.