永发信息网

c++多线程中怎么实现信号量或者互斥量在多个线程之间的使用?

答案:1  悬赏:50  手机版
解决时间 2021-11-24 19:02
c++多线程中怎么实现信号量或者互斥量在多个线程之间的使用?
最佳答案
生产者消费者访问的都是同一个共享对象,这个共享对象提供读写操作,然后生产者线程调用写操作,消费者线程调用同一对象读操作,在这个共享对象里定义一个信号量,在读写成员函数中保证互斥就行了。估计你用的是Win32 API 或者 Pthread API吧。。。。呵呵,那些东西太底层了。


发个参考代码。。。。


#include 
#include 
#include 
#include 
#include 
#include 

template 
class SharedObject {
public:
SharedObject(const T & init = T()) : data_(init) {}
SharedObject(const SharedObject &) = delete; 
SharedObject & operator =(const SharedObject &) = delete;
const T & read() const {
std::lock_guard lg(const_cast(m_));
return data_;
}
void write(const T & data) {
std::lock_guard lg(m_);
data_ = data;
}
private:
T data_;
std::mutex m_;
};


void work1(SharedObject & os);
void work2(SharedObject & os);

int main() {
SharedObject so;
std::thread producer(work1, std::ref(so)), consumer(work2, std::ref(so));
std::cin.get();
producer.detach();
consumer.detach();
}


void work1(SharedObject & so) {
while(true) {
std::cout << so.read() << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
void work2(SharedObject & so) {
srand(time(nullptr));
while(true) {
so.write(rand() % 100);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
} 运行结果:

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
广州花都高新职业技术学校怎么么样。
猪来马去 是什么意思
移门滑轮维修,木质移门,单滑轮
谢娜表白张杰快乐大本营是哪一期
the big short是什么意思
PS4怎么给索尼发邮件
英文翻译其次你以一种幽默的方式赢得了成功
x的平方-4x+3=0用配方法怎么算?考试急用啊,
为什么晚上老是听见楼上地板掉东西
适合篆刻的圣经经文
阜新县老河土派出所地址好找么,我有些事要过
用绝无仅有这个词来赞美长城
凯华汽车租赁地址在什么地方,我要处理点事!
虾油放久了会有一股不好闻的味道怎么办
限速20公里超速多少处罚
推荐资讯
18.9-18.9乘0.4的算式怎么列?
人春才七日,离家已二年.人归落雁后,思发在花
关于求电压。第六题怎么做。
我这辈子录过口供, 砍过人,被人砍过,死都不怕
用于纸箱生产的模切板有没有国家标准
颧骨高和颧骨低哪个让人的正脸和侧脸看起来更
卫生副高级职称证书使用年限
3dmax2016 启动出错 是什么原因?
用气垫bb之前是用vdl贝壳提亮液好,还是兰芝隔
PNP共射放大电路
什么样的八字格局容易出黑道首领?
MAC透明的那款妆前乳有隔离作用吗?用CC霜之
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?