pthread中提供了pthread_mutex_t互斥锁 和 pthread_cond_t条件变量,我们通常在同一进程不同线程中使用,很少在进程间使用,这次通过实现一个生产者解锁多个阻塞消费者的例子来展示下用法。
由于pthread_mutex_t不提供通过名称来在进程间共享的功能,我们通过共享内存的方式来达到共享。注意的是要指定PTHREAD_PROCESS_SHARED
struct SHM_Data
{
pthread_mutex_t mutex;
pthread_cond_t cond;
};
// 打开共享内存
shm_fd_ = shm_open(shm_path_.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0777);
if (shm_fd_ < 0)
{
printf("shm_open failed\n");
return false;
}
uint64_t size = sizeof(SHM_Data);
if (ftruncate(shm_fd_, size) == -1)
{
printf("ftruncate failed\n");
return false;
}
shm_data_ = (SHM_Data *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd_, 0);
if (shm_data_ == MAP_FAILED)
{
printf("mmap failed\n");
return false;
}
pthread_mutexattr_t attrmutex;
pthread_mutexattr_init(&attrmutex);
pthread_mutexattr_setpshared(&attrmutex, PTHREAD_PROCESS_SHARED);