OberonCore
https://forum.oberoncore.ru/

Реализация критической секции на Interlocked Exchange
https://forum.oberoncore.ru/viewtopic.php?f=31&t=1029
Страница 2 из 2

Автор:  Сергей Губанов [ Вторник, 24 Июнь, 2008 09:55 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

В книге "Основы многопоточного, параллельного и распределённого программирования" Грегори Р. Эндрюс, освобождает флаги простым присваиванием f = 0. Моя программа семь ночей работала и не зависла. Может всё-таки боязнь обычного присваивания f = 0 вместо интерлокедного ничем реально не обоснована?..

Автор:  Илья Ермаков [ Вторник, 24 Июнь, 2008 10:51 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Видимо, всё же можно...

Автор:  Mirage [ Вторник, 24 Июнь, 2008 12:05 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Вполне возможно, что на текущих процах можно и простым присваиванием.
Но с другой стороны, даже на новых ревизиях существующих процессоров это может поменяться. Да и то, что программа работает мало о чем говорит, т.к. тест должен хорошенько зависеть от правильности кр. секции. Плюс должно не повезти с реордерингом, что зависит не от времени работы, а самого кода программы, вероятно.

Автор:  Vlad [ Вторник, 24 Июнь, 2008 14:22 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Сергей Губанов писал(а):
В книге "Основы многопоточного, параллельного и распределённого программирования" Грегори Р. Эндрюс, освобождает флаги простым присваиванием f = 0.


В этой книге есть отдельная глава - "Блокировки и барьеры". Зачем она там, если можно "простым присваиванием"? :)

Сергей Губанов писал(а):
Моя программа семь ночей работала и не зависла.


Это ни о чем не говорит :) Серьезно. Никто не хочет, чтобы программа упала на 8-й день. Или на новом проце. И именно с такими недетерминированными ошибками наиболее сложно бороться.

Автор:  Сергей Губанов [ Вторник, 24 Июнь, 2008 17:37 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Vlad писал(а):
В этой книге есть отдельная глава - "Блокировки и барьеры". Зачем она там, если можно "простым присваиванием"? :)

Так я про третью главу "Блокировки и барьеры" как раз и говорю. Отмена блокировки в ней осуществляется простым присваиванием lock = false. Вот захватить lock (т.е. сделать его true) -- это проблема, а отпустить ранее захваченный -- не проблема, просто пишем lock = false и всё.

Автор:  Сергей Губанов [ Вторник, 24 Июнь, 2008 18:04 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Там:

http://www.bluebytesoftware.com/blog/Co ... b68f4.aspx

говорят, что на x86 и на x64 писать просто flag = 0 можно, а на IA64 нельзя. Однако обычное присваивание flag = 0 "долго доходит" до других процессоров. То есть при простом присваивании один процессор из критической секции уже давно вышел и пошёл делать что-то другое, а другие процессоры всё ещё думают, что он ещё из неё не вышел.

Автор:  Geniepro [ Среда, 25 Июнь, 2008 00:08 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

В википедии про статье "Spinlock" как раз упоминается про оптимизации, которые можно проделывать на современных процессорах: можно безопасно заменить операцию xchg на более быструю mov:
Цитата:
On later implementations of the x86 architecture, spin_unlock can safely use an unlocked MOV instead of the locked XCHG, which is much faster. This is due to subtle memory ordering rules which support this, even though MOV isn't a full memory barrier. However some processors (some Cyrix processors, some revisions of the Intel Pentium Pro (due to bugs), and earlier Pentium and i486 SMP systems) will do the wrong thing and data protected by the lock could be corrupted. On most non-x86 architectures, explicit memory barrier instructions or atomic instructions (like in the example) must be used, or there may be special "unlock" instructions (as on IA64) which provide the necessary memory ordering.

В-общем, можно, но опасно -- могут быть проблемы с совместимостью...

Автор:  Vlad [ Среда, 25 Июнь, 2008 15:48 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Сергей Губанов писал(а):
Так я про третью главу "Блокировки и барьеры" как раз и говорю. Отмена блокировки в ней осуществляется простым присваиванием lock = false. Вот захватить lock (т.е. сделать его true) -- это проблема, а отпустить ранее захваченный -- не проблема, просто пишем lock = false и всё.


Гхм. А применительно к какому языку? В электронном виде эта книжка существует?

Автор:  Сергей Губанов [ Среда, 25 Июнь, 2008 18:05 ]
Заголовок сообщения:  Re: Реализация критической секции на Interlocked Exchange

Vlad писал(а):
Гхм. А применительно к какому языку? В электронном виде эта книжка существует?

Автор пытался писать поуниверсальнее поэтому изобрёл свой собственный язык, похожий на Си.
В электронном виде должна быть, она давно вышла.

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/