- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何创建一个锁来锁定不同线程进入该函数?线程 1:A线程 2:C主题 3:C线程 4:B线程 5:C主题 6:B
“A”、“B”、“C”是创建线程时传递给线程的参数。
所以当我锁定这一个锁X时,所有传入“A”和“B”的线程都无法继续,只有“C”类型的线程可以进入临界区。或者我必须为此示例制作 6 个不同的锁吗?
谢谢!
最佳答案
您的要求很模糊,但假设您希望并发读者具有相同的“允许的字母”,那么您最好使用 rwlock。 (如果您实际上只是希望“控制”线程设置允许 A、B 或 C 中的哪一个工作,而不是在受控代码中没有其他“字母”运行时让 A、B 和 C 接管,那么需要一个不同的(更简单的)解决方案......)
作为第一步(这样我们就可以以更容易理解的方式“演化”解决方案),每个线程:
1) 获取读卡器锁
2)如果“允许的字母”变量与他们的字母不同,他们会释放读取器锁并尝试写入器锁
2a) 当获得写入锁时,他们将允许的字母修改为自己的字母,然后释放该锁并在 1) 处重新启动(见下文)
3)做好自己的工作
4)释放读卡器锁
这使用“writer”模式来影响允许字母的更改。如果您实际上需要仲裁一些对共享数据具有写访问权限的“允许字母”线程,您将需要更改 3) 以在要释放的不同 rwlock 上获取读取器或写入器锁之前4)。
2a) 创建竞争条件,也就是说,A 线程获取写入者锁,然后设置允许的字母,当它释放锁时,B 线程可能会先获取写入者锁,然后才能获取读取者锁来执行某些实际工作。然后,B 线程可能会释放写入者锁并寻求读取者锁,却发现 A 现在拥有该锁,因此线程都不会继续进行,但它们本身也不会死锁。这个问题是否能自行解决主要取决于 rwlock 的线程排队实现,还取决于竞争条件、中断、系统负载导致的抢占等。可以通过多种方式解决这个问题,但它很容易并且可能足以使用一个额外的互斥锁,以禁止具有写锁的其他线程修改允许的字母:它们可以对此使用 trylock,如果失败,则释放它们的写锁并在 1) 处重新启动。
因此,我们最终得到一两个 rwlock 和一个支持互斥锁......
关于c++ - 如何为多种线程加锁 pthread_mutex_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21593275/
确保只有“后入”线程可以访问互斥锁/锁定区域而中间线程不获取锁的正确方法是什么? 示例序列: A acquires lock B waits C waits B fails to acquire lo
synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰
某个线程要共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进入写入操作,
我是一名优秀的程序员,十分优秀!