单读者写者(一个读者一个写者)问题为何要加锁
来源:互联网 发布:王泽鉴天龙八部知乎 编辑:程序博客网 时间:2024/05/17 01:44
http://bbs.csdn.net/topics/390248385 提出了一个问题:“一个线程读数据,一个线程写数据,要加锁?”并给出结论说不需要加锁。
不论作者水平如何,总会有很多人也都在想这个问题。
问题中给出了这样一个例子:
全局变量int g_val;
线程1
{
printf("%d",g_val);
}
线程2
{
g_val++;
}
在这个例子里,可以不加锁。因为这个g_val影响很小。
实际应用中,假设线程2每10秒执行一次,线程1作为显示线程2执行次数的计数器,每60秒执行一次,就可能出现线程2执行了11次,但是显示只有10次的情况。
次数多少可能不会造成重大影响。对例子做一定的修改如下:
int *g_val;
void Thread1()
{
while(1)
{
//打印g_val数据
printf("%d",*g_val); //p1
msleep(300);
}
}
void Thread2()
{
while(1)
{
//修改g_val数据
if(g_val!=NULL)
{
delete []g_val;
g_val=NULL;
msleep(100); //1
g_val = new int(10000);
}
msleep(1);
}
}
这种例子下,如果Thread2在执行1,而Thread1在执行p1那句话,程序跑着跑着可能就崩了。
所以,单个读者单个写者也是要做互斥保护的!
0 0
- 单读者写者(一个读者一个写者)问题为何要加锁
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者问题
- 读者-写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者问题
- 读者写者问题
- 读者-写者问题
- 读者写者问题
- 读者-写者问题
- 读者写者问题
- 读者写者问题
- C语言--无类型指针
- 如何解决使用pypal库创建svg图表失败
- nginx+tomcat实现主备切换
- 从1到n整数中1出现的次数(Java实现)
- recvmsg和sendmsg函数
- 单读者写者(一个读者一个写者)问题为何要加锁
- SpringMvc中配置国际化资源文件
- Java简单实用方法一
- Java并发编程-2 对共享资源的访问控制
- Apache-tomcat配置网站主目录和startup闪退以及配置无效
- Oracle知识点连载(一)
- RMAN备份与恢复系列之redo日志文件恢复
- bootstrap当中,实现一些常用的元素居中
- 判断二叉树是否对称