**问题一:**多线程分别执行两个函数,他们都会访问一个共享内存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】