如何以原子方式制作功能?

时间:2018-05-12 10:56:04

标签: locking mutex semaphore

我现在正在练习锁定,信号量,互斥...

我尝试实现简单的代码,以便使用互斥锁迭代地添加1。

这是我的代码。

[A.C]

for(int i=0; i<1000;i++){ 
   acquire(&lock);
   ADD1("count.txt"); // count.txt is shared memory 
   temp=Load("count.txt") // Load func get number
   printf("\n %d",temp);
   release(&lock);
}

[B.c]也与A完全相同。

我编译了A.c和B.c

gcc A.c -o A
gcc B.c -o B

并执行

./A & ./B

我期望的是提升印刷,例如

1
2
3
4
..
1999
2000

但是有问题,它正确计算到2000年

但是..它不是升序......

4
5
6
7
1
...
234
235
...
223
...
1999
2000

认为这很奇怪,因为如果我能看到'2000'那么这意味着互斥锁确实有效!

但为什么打印日志不是升序...?

p.s /抱歉,如果你不能理解......      由于我使用谷歌翻译,我的不好

0 个答案:

没有答案