C++版本:201703
g++版本:13.2.0
IDE:vscode
不带多线程的代码可以编译,但是带多线程的代码Intellisense就报错了,错误如下:
[{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "20",
"severity": 8,
"message": "未定义标识符 \"lock2\"",
"source": "C/C++",
"startLineNumber": 22,
"startColumn": 2,
"endLineNumber": 22,
"endColumn": 7
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "289",
"severity": 8,
"message": "没有与参数列表匹配的构造函数 \"std::thread::thread\" 实例",
"source": "C/C++",
"startLineNumber": 35,
"startColumn": 17,
"endLineNumber": 35,
"endColumn": 25,
"relatedInformation": [
{
"startLineNumber": 35,
"startColumn": 17,
"endLineNumber": 35,
"endColumn": 25,
"message": "参数类型为: (void (Box &from, Box &to, int num), <error-type>, <error-type>, int)",
"resource": "/e:/Code/multithread.cpp"
}
]
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "20",
"severity": 8,
"message": "未定义标识符 \"from\"",
"source": "C/C++",
"startLineNumber": 35,
"startColumn": 35,
"endLineNumber": 35,
"endColumn": 39
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "20",
"severity": 8,
"message": "未定义标识符 \"to\"",
"source": "C/C++",
"startLineNumber": 35,
"startColumn": 50,
"endLineNumber": 35,
"endColumn": 52
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "289",
"severity": 8,
"message": "没有与参数列表匹配的构造函数 \"std::thread::thread\" 实例",
"source": "C/C++",
"startLineNumber": 36,
"startColumn": 17,
"endLineNumber": 36,
"endColumn": 25,
"relatedInformation": [
{
"startLineNumber": 36,
"startColumn": 17,
"endLineNumber": 36,
"endColumn": 25,
"message": "参数类型为: (void (Box &from, Box &to, int num), <error-type>, <error-type>, int)",
"resource": "/e:/Code/multithread.cpp"
}
]
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "304",
"severity": 8,
"message": "没有与参数列表匹配的 重载函数 \"std::condition_variable::wait_for\" 实例",
"source": "C/C++",
"startLineNumber": 71,
"startColumn": 11,
"endLineNumber": 71,
"endColumn": 19,
"relatedInformation": [
{
"startLineNumber": 71,
"startColumn": 11,
"endLineNumber": 71,
"endColumn": 19,
"message": "参数类型为: (std::mutex, <error-type>)",
"resource": "/e:/Code/multithread.cpp"
},
{
"startLineNumber": 71,
"startColumn": 11,
"endLineNumber": 71,
"endColumn": 19,
"message": "对象类型是: std::condition_variable",
"resource": "/e:/Code/multithread.cpp"
}
]
},{
"resource": "/e:/Code/multithread.cpp",
"owner": "C/C++: IntelliSense",
"code": "20",
"severity": 8,
"message": "未定义标识符 \"seconds\"",
"source": "C/C++",
"startLineNumber": 71,
"startColumn": 24,
"endLineNumber": 71,
"endColumn": 31
}]
代码如下:
#if 1 //from to
#include<iostream>
#include<thread>
#include<mutex>
class Box{
public:
Box(int m):n(m){
}
int n;
std::mutex mut; //共享同一对象资源,使用同一互斥量
};
void transfer(Box &from,Box &to,int num){
std::unique_lock<std::mutex> lock1(from.mut,std::defer_lock);
std::unique_lock<std::mutex> lock1(to.mut,std::defer_lock);
lock1.lock();
lock2.lock();
from.n-=num;
to.n+=num;
lock1.unlock();
lock2.unlock();
}
int main(){
Box b1(100);
Box b2(50);
std::thread t1(transfer,std::ref(from),std::ref(to),50);
std::thread t2(transfer,std::ref(to),std::ref(from),20);
t1.join();
t2.join();
std::cout<<"b1:"<<b1.n;
std::cout<<" b2:"<<b2.n;
}
#endif
#if 1 //输入同时...
#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
#include<chrono>
using namespace std;
condition_variable cv;
void input(int &val){
cin>>val;
cv.notify_one();
}
int main(){
int value;
thread inputThread(input,ref(value));
cout<<"请输入:"<<endl;
mutex mut;
while(cv.wait_for(mut,seconds(1))==std::cv_status::timeout){
cout<<".";
}
cout<<"输入了"<<value<<endl;
return 0;
}
#endif