Q 21 :
题目:
i的初始值为0,i++在两个线程里面分别执行100次,能得到最大值是(),最小值是()。
答案:
200
2
解答:
考察多线程操作同一未上锁变量。
1. 每次都准确加1,结果为最大,200。
2. 结果为2时步骤:
a取内存0到寄存器,b取内存0到寄存器;
a执行99次并写入内存,内存值为99;
b执行1次并写入内存,内存值被覆盖为1;
a取内存1到寄存器,b取内存1到寄存器;
b执行99次并写入内存,内存值为100;
a执行1次,写入内存,覆盖之前的100,值为2。
3. 每次计算过程必须是先从内存取数然后计算,之后再重新写入内存。但对各个线程而言,取数和计算中间可以被另一个线程打断。
Q 22 :
题目:
char fun(char x, char y){
if(x)
return(y);
}
int main(){
int a = '0', b = '1', c = '2';
printf("%c\n", fun(fun(a, b), fun(b, c)));
}
答案:
2
解答:
1. 均为字符,非布尔值的0,所以每次返回后者。