栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++(11):mutex

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++(11):mutex

C++11提供几种形式的mutex,并对应的提供了如下接口:

mutex,是最基本的互斥类:

当前状态lock

try_lock

unlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程未定义行为
已被当前线程加锁死锁死锁调用线程释放锁

recursive_mutex,同一线程内可递归(重入)的互斥类:

当前状态locktry_lockunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程未定义行为
已被当前线程加锁继续加锁继续加锁解锁次数与加锁次数相同后,调用线程释放锁

timed_mutex,带时限请求锁定能力的互斥类:

当前状态locktry_locktry_lock_fortry_lock_untilunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程调用线程将被阻塞,不过最多只等待设定的时间长度,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞调用线程将被阻塞,不过最多只等待到指定的时刻,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞未定义行为
已被当前线程加锁死锁死锁死锁死锁调用线程释放锁

recursive_timed_mutex,同一线程内可递归(重入)的timed_mutex:

当前状态locktry_locktry_lock_fortry_lock_untilunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程调用线程将被阻塞,不过最多只等待设定的时间长度,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞调用线程将被阻塞,不过最多只等待到指定的时刻,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞未定义行为
已被当前线程加锁继续加锁继续加锁继续加锁继续加锁解锁次数与加锁次数相同后,调用线程释放锁
#include 
#include 
#include 
using namespace std;

int g_d{0};

void tFunc(mutex& m)
{
	for(int i = 0; i < 1000000; ++i)
	{
		m.lock();    //通过mutex加锁避免竞争
		g_d++;
		m.unlock();
	}
}

int main(){
	mutex m;
	thread t1(tFunc, ref(m));
	thread t2(tFunc, ref(m));
	t1.join();
	t2.join();
	cout< 

需要说明的是:

mutex相关类不支持拷贝构造、赋值,也不支持移动构造以及移动赋值。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号