#include
#include
#include
#include
#include
using namespace std;
shared_timed_mutex sLock;
int data = 10;
bool threadExitFlag = false;
unsigned long getTime()
{
chrono::system_clock clock;
int64_t s = chrono::duration_cast<chrono::seconds>(
clock.now().time_since_epoch()).count();
return s;
}
void read_shared_data(int id)
{
while(!threadExitFlag){
shared_lock<shared_timed_mutex> slk(sLock);
cout << getTime() << " read thread " << id << " data=" << data << endl;
this_thread::sleep_for(chrono::milliseconds(100));
}
}
void addDataFunc(int id){
while(!threadExitFlag){
{
unique_lock<shared_timed_mutex> ulk(sLock); //写锁加锁
cout << getTime() << " write thread "<< id << " begin,num:"<< ++data<<"-------------" << endl;
if(data == 20){
threadExitFlag = true;
}
}
this_thread::sleep_for(chrono::milliseconds(200));
}
}
int main()
{
thread t1(read_shared_data, 1); //启动线程t1
thread t2(read_shared_data, 2); //启动线程t2
thread t3(addDataFunc,0);
t1.join();
t2.join();
t3.join();
return 0;
}
输出为:
1667375955 read thread 1 read data=10
1667375955 read thread 2 read data=10
1667375955 write thread 0 begin,num:11-------------
1667375955 read thread 2 read data=11
1667375955 read thread 1 read data=11
16673759551667375955 read thread read thread 2 read data=1 read data=1111
1667375955 read thread 1 read data=11
1667375955 read thread 2 read data=11
1667375955 write thread 0 begin,num:12-------------
1667375955 read thread 2 read data=12
1667375955 read thread 1 read data=12
1667375955 read thread 1 read data=12
1667375955 read thread 2 read data=12
1667375955 write thread 0 begin,num:13-------------
1667375955 read thread 2 read data=13
1667375955 read thread 1 read data=13
16673759551667375955 read thread read thread 21 read data=13 read data=13
1667375955 write thread 0 begin,num:14-------------
1667375955 read thread 2 read data=14
1667375955 read thread 1 read data=14
16673759551667375955 read thread read thread 2 read data=1 read data=1414
1667375956 write thread 0 begin,num:15-------------
1667375956 read thread 2 read data=15
1667375956 read thread 1 read data=15
1667375956 read thread 1 read data=15
1667375956 read thread 2 read data=15