LINUX.ORG.RU

История изменений

Исправление kvpfs_2, (текущая версия) :

Речь про многопоток. Обычно синхронизация обеспечивается путем - есть поток X, который что-то писал куда-то, в конце он делает release запись. Есть поток Y, он acquire читает записанное в атомик потоком X и видит всё, что он видел на момент записи данного значения в атомик.

Но тут случай особый - запись в атомик есть, но она не является release, а чтение не acquire, а значит при чтении Y не получает в свою «видимость» контекст потока X в момент записи. Если счетчик в моем примере (cnt) был бы обычным int’ом - то всё было бы ясно, но счётчик и сам атоимк, может ли у атомика быть различная наблюдаемая история модификаций (с точки зрения различных потоков)? Как тогда делать инкремент? Например, один поток увидел 5, прибавил 1, не может же другой поток опять увидеть 5 и вновь прибавить 1? С другой стороны операции с атомиками могут быть с тагом memory_order_seq_cst, что как бы устанавливает один общий порядок модификации с точки зрения всех потоков (выходит, что иначе он разный?).

В общем я не знаю, у меня есть аргументы как «за», так и «против»

Исходная версия kvpfs_2, :

Речь про многопоток. Обычно синхронизация обеспечивается путем - есть поток X, который что-то писал куда-то, в конце он делает release запись. Есть поток Y, он acquire читает записанное в атомик потоком X и видит всё, что он видел на момент записи данного значения в атомик.

Но тут случай особый - запись в атомик есть, но она не является release, а чтение не acquire, а значит при чтении Y не получает в свою «видимость» контекст потока X в момент записи. Если счетчик в моем примере (cnt) был бы обычным int’ом - то всё было бы ясно, но он и сам атоимк, может ли атомика быть различная наблюдаемая история модификаций (с точки зрения различных потоков)? Как тогда делать инкремент? Например, один поток увидел 5, прибавил 1, не может же другой поток опять увидеть 5 и вновь прибавить 1? С другой стороны операции с атомиками могут быть с тагом memory_order_seq_cst, что как бы устанавливает один общий порядок модификации с точки зрения всех потоков (выходит, что иначе он разный?).

В общем я не знаю, у меня есть аргументы как «за», так и «против»