printf 原理探讨
来源:互联网 发布:阿里云手机端 编辑:程序博客网 时间:2024/05/21 08:43
今天看到一个笔试题,觉得有必要讨论一下,顺便可以把printf 的原理搞的更清楚一点。
题目如下:两个线程并发执行以下代码,假设a是全局变量,那么以下输出中___是不可能的。
void function()
{
a = 5;
a = a + 1;
printf("%d_",a);
}
A. 5_6_ B. 6_5_ C. 6_7_ D. 7_6_
讨论:
A和C是比较明显的,不再讨论;B和D选项需要明确printf的原理才可以详细解释。
首先讨论B,当前问题是:如果出现先输出6后输出5的情况,那么printf一定非原子操作,即当1(线程1,下同)将要执行printf时,2(线程2,下同)执行a=5,此时1将a压入printf但还未输出,此时2执行结束输出6,1完成最后输出5的工作;
对于选项D,当1和2都完成a=5后,1执行a=a+1并将6压入printf但是为输出,此时2执行剩下代码输出7,然后1完成剩下工作输出6;
对于BD的讨论采用将printf当做两个步骤来执行,首先是压入数值,其次是输出,但是是否正确,仍需考虑printf原理!
printf原理:待续
- printf 原理探讨
- printf原理
- printf 原理
- printf 实现原理
- printf的实现原理
- printf实现原理
- printf函数实现原理
- printf的实现原理
- printf函数实现原理
- printf实现原理
- AlphaGo原理探讨
- Socket通信原理探讨
- 探讨PHP框架原理
- java foreach原理探讨
- printf 函数的实现原理
- printf 函数的实现原理
- printf 函数的实现原理
- printf函数的实现原理
- linux下/dev/shm是什么?
- 类的大小 2
- 谷歌与火狐的CSS:hover差异
- 坑爹的innerText
- html代码测试小工具
- printf 原理探讨
- Java Bytes 操作和类型转换
- 我在北京找工作(五):备战阿里巴巴java笔试<1>:筑基
- ubuntu常用工具安装
- 高性能WEB开发之Web性能测试工具推荐
- Jump Game II
- Linux (Ubuntu) 下文件共享服务 Samba 安装
- js实现滚动条效果
- cocos2d-x初探学习笔记(24)--音乐音效