C++ 使用boost::upgrade_lock和shared_lock实现读/写线程安全 double x=10; boost::shared_mutex xSharedMutex; void r(){ boost::共享锁(xSharedMutex); 对于(int i=0;i

C++ 使用boost::upgrade_lock和shared_lock实现读/写线程安全 double x=10; boost::shared_mutex xSharedMutex; void r(){ boost::共享锁(xSharedMutex); 对于(int i=0;i,c++,multithreading,boost,thread-safety,C++,Multithreading,Boost,Thread Safety,您需要唯一的所有权来写作: double x = 10; boost::shared_mutex xSharedMutex; void r() { boost::shared_lock<boost::shared_mutex> lock(xSharedMutex); for (int i = 0; i < 100; i++) { cout << "**** READ **** " << x << endl;

您需要唯一的所有权来写作:

double x = 10;
boost::shared_mutex xSharedMutex;


void r() {
    boost::shared_lock<boost::shared_mutex> lock(xSharedMutex);
    for (int i = 0; i < 100; i++) {
        cout << "**** READ **** " << x << endl;
        usleep(200);
    }
}

void w() {
    boost::upgrade_lock<boost::shared_mutex> lock(xSharedMutex);
    for (int i = 0; i < 100; i++) {
        x = i + 12;
        cout << "---- WRITE ---- " << x <<endl;
        usleep(200);
    }

}

int main() {
    boost::thread t1(&r);
    boost::thread t2(&w);

    sleep(3);
}
boost::unique_lock锁(xSharedMutex);
对于(int i=0;i<100;i++){
x=i+12;
标准::cout
boost::unique_lock<boost::shared_mutex> lock(xSharedMutex);
for (int i = 0; i < 100; i++) {
    x = i + 12;
    std::cout << "---- WRITE ---- " << x << std::endl;
    usleep(200);
}
upgrade_lock<shared_mutex> lock(xSharedMutex);
for (int i = 0; i < 100; i++) {
    {
        upgrade_to_unique_lock<shared_mutex> write_lock(lock);
        x = i + 12;
        std::cout << "---- WRITE ---- " << x << std::endl;
    }
    usleep(200);
}