如何锁定各种线程pthread_mutex_lock
how to lock for a variety of threads pthread_mutex_lock
您如何创建一个锁定的锁定,该锁可以锁定不同的线程输入功能?线程1:a线程2:C线程3:C线程4:B线程5:C线程6:b
" a"," b"," C"是创建线程的参数。
因此,当我锁定一个锁定X时,所有的线程都会传递给" A"answers" B",并且只有" C"类型的线可以进入关键部分。还是我必须制作6个不同的锁?
谢谢!
您的要求含糊不清,但是假设您想要同时使用相同的"允许字母"的读者,则最好使用rwlock。(如果您实际上只想设置一个"控制"线程,则允许A,B或C的哪个线程,而不是让A,B和C接管任何其他"字母"需要一个不同的(简单)解决方案....)
作为第一个切口(因此我们可以以更容易理解的方式"发展"解决方案),每个线程:
1)获取读取器锁
2)如果"允许的字母"变量与其字母不同,则会释放读取器锁并尝试为作者锁
     2a)在获取作家锁时,它们将允许的字母修改为自己,然后将锁定并在1处重新启动)(请参见下文)
)3)做他们的工作
4)释放阅读器锁
这使用"作家"模式来影响允许字母的更改。如果您实际上需要仲裁一些对共享数据的写入访问权限的"允许字母"线程,则需要更改3)将读者或作家锁定在A dintiment rwlock上,以释放4)。
2a)创建了种族条件,例如,A线程获取作者锁,然后设置允许的字母,当它发布锁时,B线程可能会在作者锁定之前获得读取器锁来完成一些实际工作。然后,B线程可以释放作者锁,然后去找一个读者锁以找到现在的锁,所以线程都没有进展,但是它们本身也不会陷入僵局。这是否决定自身主要取决于RWLOCK的线程排队实现,还取决于种族条件,中断,由于系统负载而引起的先发制人等。一个额外的静音,可以禁止使用写锁修改允许字母的其他线程:他们可以在此上使用trylock,如果失败,请释放其写入锁并在1处重新启动)。
所以,我们最终得到了一个或两个rwlocks和一个支撑式的静音....
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- 使用 pthread 的多线程
- Posix 线程类和启动例程 (pthread)
- 如何修复下一个线程以使其更正确?使用 Pthread
- 如何从父线程中提取 pthread 的任务 id(tid)
- 当其中一个线程在 C++ 中使用 pthread 被杀死时,我如何保持进程的存活
- 读取另一个线程中并发运行的 pthread 的本地数据
- pthread取消成功,但在线程的100个后无法创建线程
- Pthread,杀死JNI创建的线程
- 成员变量的更新值不会在 PTHREAD 中的线程路由函数中重新排列
- 为什么使用 pthread 的 Ubuntu 中的单线程比多线程快
- 当 pthread 启动时,它是否需要互斥锁来访问之前在生成它的线程中写入的全局数据
- C++ pthread,两个线程读取一个全局变量
- pthread 在分离的线程上创建错误 11
- 是否有任何 pthread 函数可以在最后一个线程终止时调用某些内容
- pthread - 使用一个线程访问多个对象
- 停止服务器>如何验证线程是否已停止 ->pthread
- 在静态初始化期间,pthread线程变量何时开始存在
- 线程调度程序模拟:唤醒和睡眠Pthread的正确方法
- 如何在Linux上监视多线程(pthread)C++程序的每个线程行为