【发布时间】:2020-02-09 16:06:22
【问题描述】:
线程和并行编程真的让我很困惑。在第 9 页的this book 中,陈述的问题是,尽管线程可能被调度并置于ready 状态,但这并不一定意味着它已经获得了锁。
简而言之,等待锁的线程(例如 t1)通过condition_variable 通知,并且该线程处于ready 状态,但未执行。但就在它可以运行任何东西之前,另一个线程被调度(比如 t2)并执行。这意味着 t1 假设它被唤醒的条件不再成立。
这是否意味着仅仅调度一个线程或将其置于就绪状态并不意味着它获得了锁?如果是这种情况,我是否必须总是将前提条件放在 while 循环中?这是虚假唤醒的另一种可能含义吗?另外,我还必须注意哪些其他类似情况?
我一直假设如果一个线程从等待中被唤醒(这不是虚假唤醒),它会立即获取锁(在 this 情况下,唤醒 = 获取锁) ,因为内核会跟踪这一点。
这个问题与我在here 发布的其他问题密切相关。
谢谢。
我在哪里可以问这些菜鸟问题,以一种带有后续问题的互动形式?这些对于stackoverflow来说似乎太愚蠢了。
【问题讨论】:
-
请随意删除一些关于并行编程、C++ 线程处理详细的书籍和资源的链接。我很难找到资源。书籍将是理想的资源。谢谢。
标签: multithreading condition-variable thread-synchronization