多线程学习遇到的疑惑

**问题一:**多线程分别执行两个函数,他们都会访问一个共享内存a,其中一个函数对a上了锁,另一个没有上锁会发生什么?
代码如下:

void fun_one()
{
	lock.lock();
	for (int i = 0; i < 100; i++)//使用for循环,防止这个函数运行完了,第二个函数还没开始
	{
		a = 10;
		std::cout << "one:" << a << std::endl;
	}
	lock.unlock();
}
void fun_two()
{
	for (int i = 0; i < 100; i++)
	{
		a = 45;
		std::cout << "two:" << a << std::endl;
	}
}

回答:
**问题二:**先放出代码,根据代码说问题

void fun_one()
{
	lock.lock();
	for (int i = 0; i < 100; i++)
	{
		a = 10;
		std::cout << "one:" << a << std::endl;
	}
        for (int i = 0; i < 100; i++)
	{
		b = 10;
		std::cout << "one:" << b << std::endl;
	}
	lock.unlock();
}
void fun_two()
{
	lock.lock();
	for (int i = 0; i < 100; i++)
	{
		b = 45;
		std::cout << "one:" << b << std::endl;
	}
        for (int i = 0; i < 100; i++)
	{
		a = 45;
		std::cout << "one:" << a << std::endl;
	}
	lock.unlock();
}

以上两个函数多线程运行,假如第一个函数抢到了锁,那么第二个函数是否需要等待第一个函数释放锁,才能继续运行(两个函数的区别就是一个先对a操作,另一个是先对b操作)?
回答
**问题三:**先放代码,根据代码说问题

std::mutex lock;
int a,b;
void fun_one()
{
	lock.lock();
	for (int i = 0; i < 100; i++)//使用for循环,防止这个函数运行完了,第二个函数还没开始
	{
		a = 10;
		std::cout << "one:" << a << std::endl;
	}
	lock.unlock();
}
void fun_two()
{
	lock.lock();
	for (int i = 0; i < 100; i++)
	{
		b = 45;
		std::cout << "two:" << b << std::endl;
	}
	lock.unlock();
}

两个函数多线程运行,使用同一个互斥变量进行锁,锁住部分不存在重叠(也就是不存在要访问同一个内存的情况),假如第一个函数先抢到锁,那么第二个函数是直接执行还是等待第一个函数释放锁后再执行?
回答:
**问题四:**锁的实际流程是什么?即当抢到锁后,先对lock()与unlock()之间的变量上锁,然后再运行这之间的代码,还是怎样?
回答:
**问题五:**锁的实质是锁内存还是锁代码块?
回答:
【如果有更新统一在这里:https://www.cnblogs.com/jarssion/p/14420751.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值