我是靠谱客的博主 帅气鞋垫,最近开发中收集的这篇文章主要介绍pthread mutex cond 进程间共享(PTHREAD_PROCESS_SHARED)性能探究,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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 failedn");
return false;
}
uint64_t size = sizeof(SHM_Data);
if (ftruncate(shm_fd_, size) == -1)
{
printf("ftruncate failedn");
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 failedn");
return false;
}
pthread_mutexattr_t attrmutex;
pthread_mutexattr_init(&attrmutex);
pthread_mutexattr_setpshared(&attrmutex, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&shm_data_->mutex, &attrmutex);
printf("pthread_mutex_init successn");
pthread_condattr_t attrcond;
pthread_condattr_init(&attrcond);
pthread_condattr_setpshared(&attrcond, PTHREAD_PROCESS_SHARED);
pthread_cond_init(&shm_data_->cond, &attrcond);
while (true) {
timeval tv;
gettimeofday(&tv, NULL);
printf("%ldn", tv.tv_usec);
pthread_mutex_lock(&shm_data_->mutex);
pthread_cond_broadcast(&shm_data_->cond);
pthread_mutex_unlock(&shm_data_->mutex);
sleep(1);
}
消费者通过相同的共享内存映射结构体,就可以在mutex 和cond上进行wait。和普通使用没有什么区别
shm_fd_ = shm_open(shm_path_.c_str(), O_RDWR, 0777);
if (shm_fd_ < 0)
{
printf("shm_open failedn");
return false;
}
SHM_Data *shm_info_ = (SHM_Data *)mmap(NULL, sizeof(SHM_Data), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd_, 0);
if (shm_info_ == MAP_FAILED)
{
printf("mmap info failedn");
return false;
}
while (true) {
timeval tv;
gettimeofday(&tv, NULL);
printf("%ldn", tv.tv_usec);
pthread_mutex_lock(&shm_data_->mutex);
pthread_cond_wait(&shm_data_->cond, &shm_data_->mutex);
pthread_mutex_unlock(&shm_data_->mutex);
}
经过测试发现,消费者解锁和有名信号量解锁以及inotify解锁的方式基本等价,大概在40-80us之间波动。
最后
以上就是帅气鞋垫为你收集整理的pthread mutex cond 进程间共享(PTHREAD_PROCESS_SHARED)性能探究的全部内容,希望文章能够帮你解决pthread mutex cond 进程间共享(PTHREAD_PROCESS_SHARED)性能探究所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复