Я сейчас практикую замок, семафор, взаимоисключающие ..
Я пытаюсь реализовать простой код, такой, чтобы добавить 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, мой плохой