Как заставить функцию атомарно? - PullRequest
0 голосов
/ 12 мая 2018

Я сейчас практикую замок, семафор, взаимоисключающие ..

Я пытаюсь реализовать простой код, такой, чтобы добавить 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 / извините, если вы не можете хорошо понять ... Так как я использовал перевод Google, мой плохой

...