首页 > 编程知识 正文

c·c11(互斥信号量的范围)

时间:2023-05-06 16:57:36 阅读:78200 作者:600

当多个线程访问同一资源时,最简单的方法是使用独占锁(mutex )来确保数据完整性。

(1) .直接操作mutex,即直接调用mutex的lock/unlock函数。 本示例使用boost:thread_group创建线程组。

#include iostream

#include boost/thread/mutex.hpp

# include boost/thread/thread.HPP

boost:mutex mutex;

int count=0;

语音计数器

mutex.lock (;

int i= count;

STD :3360 cout ' count==' istd 33603360 endl;

//如果前面的代码有异常,unlock将无法调整。

mutex.unlock (;

}

int main () )。

//创建线程组。

boost :3360 thread _ group threads;

for(intI=0; i 4; I ) {

threads.create_thread(counter );

}

//等待所有线程结束。

threads.join_all (;

返回0;

(2) .使用lock_guard自动锁定、解锁。 原理是RAII,与智能指针相似

#include iostream

# include boost/thread/lock _ guard.HPP

#include boost/thread/mutex.hpp

# include boost/thread/thread.HPP

boost:mutex mutex;

int count=0;

语音计数器

//lock_guard用构造函数锁定,用析构函数解除锁定。

boost :3360 lock _ guard boost :3360 mutex lock (mutex );

int i= count;

STD :3360 cout ' count==' istd 33603360 endl;

}

int main () )。

boost :3360 thread _ group threads;

for(intI=0; i 4; I ) {

threads.create_thread(counter );

}

threads.join_all (;

返回0;

(3) .通过unique_lock自动锁定、解锁。

unique_lock与lock_guard的原理相同,但提供了更多功能,如可与条件变量结合使用。 注意: mutex:scoped_lock实际上是unique_lockmutex的类型def。

#include iostream

#include boost/thread/mutex.hpp

# include boost/thread/thread.HPP

boost:mutex mutex;

int count=0;

语音计数器

boost :3360 unique _ lock boost :3360 mutex lock (mutex );

int i= count;

STD :3360 cout ' count==' istd 33603360 endl;

}

int main () )。

boost :3360 thread _ group threads;

for(intI=0; i 4; I ) {

threads.create_thread(counter );

}

threads.join_all (;

返回0;

最后,如果你想学习C/C,请通过私信小编“01”取得素材资料、开发工具和听课权限。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。