分叉,我有以下程序:而持有锁
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
int main() {
pthread_mutex_t lock_;
pthread_mutexattr_t ma;
pthread_mutexattr_init(&ma);
pthread_mutexattr_setpshared(&ma, PTHREAD_PROCESS_SHARED);
pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK);
pthread_mutex_init(&lock_, &ma);
pthread_mutex_lock(&lock_);
if(fork()==0) {
std::cout << "child" << std::endl;
pthread_mutex_lock(&lock_);
std::cout << "finish" << std::endl;
} else {
std::cout << "parent" << std::endl;
sleep(1);
pthread_mutex_lock(&lock_);
std::cout << "parent done" << std::endl;
}
}
我看到EIS的家长可以重新锁定互斥的行为,而不是孩子。我希望fork()能够分离当前线程的所有上下文,所以孩子最终会锁定它已锁定的锁(IE,我不想共享锁 - 两个进程都有自己的锁是我想要的)。为什么这不起作用/我该如何做到这一点?
[fork without exec,pthread \ _mutex \ _t共享对象使用]的可能重复(https://stackoverflow.com/questions/20557185/fork-without-exec-and-pthread-mutex-t-used -by-shared-object) –
因此,没有办法让当前线程锁定互斥锁,并且在fork之后,子进程和父进程的互斥锁都在该进程中工作? –