Console.WriteLine对线程同步的影响

本文探讨了一个令人困惑的现象:在多线程环境下,Console.WriteLine的使用似乎影响了线程同步,导致输出结果出乎意料地正确。通过实验和分析,作者发现Console.WriteLine并非使线程同步,而是降低了多线程并发操作同一变量的概率,从而减少了错误结果的出现。最终,一位群友提供了反例,进一步揭示了这个问题的本质。
摘要由CSDN通过智能技术生成

来源:https://note.guoqianfan.com/2021/04/10/Console.WriteLine对线程同步的影响/

这天群里有人发了个图,说i++是原子性的,然后贴出了代码。

i++肯定不是原子性的,这我知道,但是图里的输出结果却是正确的,这就有点问题了。

牵挂了2天,我亲自测试了下,确实有问题,测试代码如下:

int a = 0;
List<Task> tasks3 = new List<Task>();
for (int m = 0; m < 20; m++)
{
    Task task = Task.Run(() =>
    {
        for (int i = 0; i < 600; i++)
        {
            a = a + 1;

            Console.WriteLine("task" + Thread.CurrentThread.ManagedThreadId + ":" + i + $",a:{a}");
        }
    });
    tasks3.Add(task);
}

awai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值