单读者写者(一个读者一个写者)问题为何要加锁

本文探讨了在单读者单写者问题中是否需要加锁的问题。虽然一个简单的例子表明在某些情况下可能不需要加锁,但当涉及到更复杂的场景,如线程间的操作同步时,加锁变得必要,以防止潜在的数据不一致性和程序崩溃。因此,即使是单个读者和单个写者,为了保证数据的正确性和系统的稳定性,仍需要进行互斥保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://bbs.youkuaiyun.com/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);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值