c++ - C++多线程并行编程锁

标签 c++ multithreading parallel-processing locking

如何回答这个问题?请帮忙。

考虑以下具有 3 个线程的程序。

locks l1, l2, l3;

*线程 1

while(1){

l1.lock();

l2.lock();

printf(“Red”);

l3.unlock();

l1.unlock();}

*线程 2

while(1){

l2.lock();

l3.lock();

printf(“Green”);

l1.unlock();

l2.unlock();}

*线程 3

while(1){

l3.lock();

l1.lock();

printf(“Blue”);

l2.unlock();

l3.unlock();}

a) 上述计划的可能结果是什么。你能解释一下这是怎么发生的吗? b) 这段代码会导致死锁吗?

最佳答案

这取决于 l1.lock()l1.unlock() 等实际执行的操作。由于这是标记为 C++(尽管标题说的是 C),如果这些函数调用正在管理 std::mutex 对象,结果是未定义的行为,每个线程解锁一个它没有锁定的互斥量.

关于c++ - C++多线程并行编程锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40947526/

相关文章:

C++程序在输出整数时异常退出

c++ - 在 C++ 中读取 .csv 文件时遇到问题

c# - 多等待句柄

java - 如何解决 Java 中的 "Double-Checked Locking is Broken"声明?

python - 了解 dask 中的 map_partitions 的作用

c++ - 如何从 std::tm 转换为 Windows::Foundation::DateTime

c++ - 使用 IsWow64Process 而不是单独编译

c++ - 如何避免或抑制此无锁堆栈中的竞争?

c# - 使用列表和并行循环时出现异常

hadoop - 临时挂起 hadoop 节点 - 后台 hadoop 集群