- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在尝试编写一个应该死锁的 C++ 程序。使用我的以下代码,我相信它应该可以工作但不会死锁。是我的 mutex.lock() 没有正常工作吗?我的意思是如果 mut2.lock() 锁定关键部分,它应该解锁直到它正确完成意味着 funcA 不应该运行或至少等到 mut2.unlock() 因为它们都使用资源 rs2?为什么我不能使程序死锁?
#include <iostream>
#include <thread>
#include <mutex>
#include <pthread.h>
#include <cstdio> // getchar
#include <thread> // this_thread, yield
#include <future> // async
#include <chrono> // seconds
#include <unistd.h>
using namespace std;
mutex mut1, mut2, mut3;
int rs1=1; int rs2 = 2; int rs3=3;
int MAX = 20;
void funcA(){
mut1.lock();
cout<<"mut1 lock for thread A\n";
for(int i=0; i<MAX; i++){
rs2 = i;
cout<<"[Aloop]rs1: "<<rs1<<" rs2: "<<rs2<<" rs3: "<<rs3<<" i:"<<i << endl;
}
rs1 = rs2;
cout<<"[A]rs1: "<<rs1<<" rs2: "<<rs2<<" rs3: "<<rs3 << endl;
mut1.unlock();
cout<<"mut1 unlock for thread A\n";
}
void funcB(){
mut2.lock();
cout<<"mut2 lock for thread B\n";
rs3 = rs1 + rs2;
cout<<"[B]rs3: "<<rs3 << " rs1: "<<rs1 << " rs2: "<<rs2 <<endl;
sleep(50);
mut2.unlock();
cout<<"mut2 unlock for thread B\n";
}
int main(){
thread tA(funcA);
thread tB(funcB);
tA.join();
tB.join();
return 0;
}
//Here is my makefile
#Makefile project 2
project2: project2.o
g++ -std=c++11 -pthread -o project2 project2.o
project2.o: project2.cpp project2.h
g++ -std=c++11 -Wall -pthread -c project2.cpp
//Below is my output
mut2 lock for thread B
[B]rs3: 3 rs1: 1 rs2: 99
mut1 lock for thread A
[Aloop]rs1: 1 rs2: 0 rs3: 3 i:0
[Aloop]rs1: 1 rs2: 1 rs3: 3 i:1
[Aloop]rs1: 1 rs2: 2 rs3: 3 i:2
[Aloop]rs1: 1 rs2: 3 rs3: 3 i:3
[Aloop]rs1: 1 rs2: 5 rs3: 3 i:5
[Aloop]rs1: 1 rs2: 6 rs3: 3 i:6
[Aloop]rs1: 1 rs2: 7 rs3: 3 i:7
[Aloop]rs1: 1 rs2: 8 rs3: 3 i:8
[Aloop]rs1: 1 rs2: 9 rs3: 3 i:9
[Aloop]rs1: 1 rs2: 10 rs3: 3 i:10
[Aloop]rs1: 1 rs2: 11 rs3: 3 i:11
[Aloop]rs1: 1 rs2: 12 rs3: 3 i:12
[Aloop]rs1: 1 rs2: 13 rs3: 3 i:13
[Aloop]rs1: 1 rs2: 14 rs3: 3 i:14
[Aloop]rs1: 1 rs2: 15 rs3: 3 i:15
[Aloop]rs1: 1 rs2: 16 rs3: 3 i:16
[Aloop]rs1: 1 rs2: 17 rs3: 3 i:17
[Aloop]rs1: 1 rs2: 18 rs3: 3 i:18
[Aloop]rs1: 1 rs2: 19 rs3: 3 i:19
[A]rs1: 19 rs2: 19 rs3: 3
mut1 unlock for thread A
mut2 unlock for thread B
最佳答案
这两个线程试图锁定不同的互斥量,因此它们不可能死锁。
虽然有许多不同的方式可以想象线程死锁,但除非一个线程试图获取另一个线程持有的互斥量,否则不会发生互斥量的死锁。 (当然,其他事情也需要发生。如果发生这种情况,它只会等待另一个线程释放互斥量而不是死锁。)
关于c++ - 互斥锁是否正常工作?不能死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285400/
我有类似下面的代码: ... id: myComponent signal updateState() property variant modelList: [] Repeater { mo
我正在处理一些我无法展示的私有(private)代码,但我已经制作了一些示例代码来描述我的问题: 主.c: #include #include #include #include typede
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: what are the differences in die() and exit() in PHP? 我想
在编写 Perl 模块时,在模块内部使用 croak/die 是一个好习惯吗? 毕竟,如果调用者不使用 eval block ,模块可能会使调用它的程序崩溃。 在这些情况下,最佳做法是什么? 最佳答案
我有一些搜索线程正在存储结果。我知道当线程启动时,JVM native 代码会代理在操作系统上创建新 native 线程的请求。这需要 JVM 之外的一些内存。当线程终止并且我保留对它的引用并将其用作
我刚刚花了很多时间调试一个我追溯到 wantarray() 的问题。 .我已将其提炼为这个测试用例。 (忽略 $! 在这种情况下不会有任何有用信息的事实)。我想知道为什么wantarray在第二个示例
我看到一些代码是这样做的: if(something){ echo 'exit from program'; die; } ...more code 和其他只使用 die 的人: if
我正在尝试将此表格用于: 如果任何 $_POST 变量等于任何其他 $_POST 变量抛出错误。 如果只有几个,那不是问题,但我有大约 20 个左右所以如果我想这样做,我将不得不像这样 但这
每次我运行: hadoop dfsadmin -report 我得到以下输出: Configured Capacity: 0 (0 KB) Present Capacity: 0 (0 KB) DFS
我是一名优秀的程序员,十分优秀!