pthread 同步锁的问题

发布于 2022-09-02 12:57:07 字数 323 浏览 24 评论 0

需求:

主线程和8个子线程,要求
1.主线程和其他8个线程(执行相同的函数fun)互斥(只要主线程开始运行,其他线程都必须等他,知道它sleep)
2.8个子线程之间可以乱序执行

我的想法:

1.使用互斥锁mutex,首先,加互斥锁,主线程加锁,fun加锁,这样满足了条件1,但会导致8个子线程也被迫同步了
2.使用semaphore,当主线程进入,直接将semaphore一直减到0,这样其他线程就不能运行了,退出时,semaphore加到8,这样8个线程就可以乱序了!问题是没有api可以直接改变semaphore的值。

有没有比较好的思路呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨落成白 2022-09-09 12:57:07

其实这个容量为8的信号量可以换成8个独立的mutex。每个子线程访问自己的就好了,主线程先都拿走,最后都放回。

这是一个简化了的读写者问题。

月亮坠入山谷 2022-09-09 12:57:07

用读写锁 pthread_rwlock_t
主线程写,其他线程读

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文