OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Вторник, 24 Июнь, 2008 09:55 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
В книге "Основы многопоточного, параллельного и распределённого программирования" Грегори Р. Эндрюс, освобождает флаги простым присваиванием f = 0. Моя программа семь ночей работала и не зависла. Может всё-таки боязнь обычного присваивания f = 0 вместо интерлокедного ничем реально не обоснована?..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Июнь, 2008 10:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Видимо, всё же можно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Июнь, 2008 12:05 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Июнь, 2008 14:22 

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


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

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Июнь, 2008 17:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
В этой книге есть отдельная глава - "Блокировки и барьеры". Зачем она там, если можно "простым присваиванием"? :)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 24 Июнь, 2008 18:04 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Там:

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Июнь, 2008 00:08 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
В википедии про статье "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.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Июнь, 2008 15:48 

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 25 Июнь, 2008 18:05 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Гхм. А применительно к какому языку? В электронном виде эта книжка существует?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB