race-condition - 对于以下竞态条件示例,为什么仅在某些环境中会出现不一致的结果,而在其他一些环境中不会出现?
问题描述
以下代码是关于经典生产者和消费者问题的,这里有一个竞争条件。当我在 Windows 10 中的 MinGW 中运行此示例时,我们有很大的概率(例如,80%)出现不一致的结果。但是,当我在 Ubuntu 中运行它时,概率极低。
此外,当我在 Java 中运行类似的代码时,出现不一致结果的概率也很高。
那么,谁能解释一下背后的不同之处。我认为是因为不同的调度机制和不同的时间片设置。
#include <stdio.h>
#include <pthread.h>
int count = 0;
void *producer(){
for(int i = 0;i<10000;i++)
count++;
}
void *consumer() {
for(int i = 0;i<10000;i++)
count--;
}
int main(int argc, const char *argv[]){
printf("initial count: %d\n",count);
pthread_t t1, t2;
pthread_create(&t1, NULL, producer,NULL);
pthread_create(&t2, NULL, consumer,NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
printf("final count: %d\n",count);
return 0;
}
解决方案
推荐阅读
- scala - 如何对scala中的数据框列进行操作
- node.js - Azure 函数 Sendgrid 附件损坏
- php - 如何使用 codeigniter 更新记录?
- c# - 在c#中读取rabbitmq队列中消息的最佳方法
- python - 在 Flask 应用程序中的模块之间共享对象
- docusignapi - Docusign - 添加补充文件
- html - 弹性堆叠柱
- hazelcast - Hazelcast 是否支持同步(sync)@Cacheable 实现
- extjs - Extjs 6.5.3 从记录值绑定小部件列的隐藏属性
- android - 设备锁定时 Altbeacon 库不扫描