pthread 同步锁的问题
需求:
主线程和8个子线程,要求
1.主线程和其他8个线程(执行相同的函数fun)互斥(只要主线程开始运行,其他线程都必须等他,知道它sleep)
2.8个子线程之间可以乱序执行
我的想法:
1.使用互斥锁mutex,首先,加互斥锁,主线程加锁,fun加锁,这样满足了条件1,但会导致8个子线程也被迫同步了
2.使用semaphore,当主线程进入,直接将semaphore一直减到0,这样其他线程就不能运行了,退出时,semaphore加到8,这样8个线程就可以乱序了!问题是没有api可以直接改变semaphore的值。
有没有比较好的思路呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实这个容量为8的信号量可以换成8个独立的mutex。每个子线程访问自己的就好了,主线程先都拿走,最后都放回。
这是一个简化了的读写者问题。
用读写锁 pthread_rwlock_t
主线程写,其他线程读