多執行緒互斥訪問資源的Demo
阿新 • • 發佈:2018-12-15
這個程式因為把執行緒的建立寫在了建構函式裡,不用顯式啟動執行緒,也因此有些臃腫。
#include <iostream> #include <stdlib.h> #include <thread> #include <mutex> #include <math.h> #include <unistd.h> using namespace std; //rand()%(b-a+1)+a; mutex mx; class A{ public: //A(){ //} void run(int * data){ srand((unsigned)time(NULL)); int n; while(true){ n=rand()%9+1; { unique_lock<mutex> lock(mx); for(int i=0;i<20;i++){ data[i]=i+1+n*100; } } } } }; class B{ public: //B(){ //} void run(int * data){ while(true){ { unique_lock<mutex> lock(mx); for(int i=0;i<20;i++) cout<<data[i]<<" "; } cout<<endl; sleep(1); } } }; class System{ public: System(){ a=new A(); b=new B(); thA=new thread(&A::run,a,data); thB=new thread(&B::run,b,data); } void run(){ cout<<"Do nothing."<<endl; } private: int data[20]; A * a; B * b; thread * thA; thread * thB; }; int main(){ System sys; getchar(); //sys.run(); return 0; }