tag:blogger.com,1999:blog-1688132520265708820.post807321042203738331..comments2023-04-02T16:52:35.787+03:00Comments on Блог GunSmoker-а (переводы): Interlocked операции не решают всегоGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-1688132520265708820.post-83639298232502088232013-03-19T15:07:35.487+04:002013-03-19T15:07:35.487+04:00А вы заметку читали? В ней речь идёт о том, что не...А вы заметку читали? В ней речь идёт о том, что нельзя смешивать Interlocked-операцию с другим механизмом синхронизации. Надо либо одно, либо другое, но не оба сразу. Смысл заметки не меняется, если заменить критическую секцию на любой другой механизм (включая spin-блокировку). Вторая часть заметки говорит, как можно обойтись Interlocked-операциями без привлечения иных механизмов синхронизации.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-69543658573016146342013-03-19T07:37:16.067+04:002013-03-19T07:37:16.067+04:00А почему бы при доступе к глобальным пермеменным н...А почему бы при доступе к глобальным пермеменным не воспользоваться более простым и надёжным способом?<br /><br />var<br /> Lock: integer;<br /><br />{Lock Initialization}<br /> Lock := -1;<br /><br />{Entering the spin lock}<br /> while InterlockedIncrement(Lock) > 0 do<br /> begin<br /> Dec(Lock);<br /> Sleep(0);<br /> end;<br /><br />{Leaving the spin lock}<br /> Dec(Lock);<br /><br />© Martin Harvey 2000.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-20387623168358153862012-05-21T20:11:02.588+04:002012-05-21T20:11:02.588+04:00Спасибо за розгорнутый ответСпасибо за розгорнутый ответRomanhttps://www.blogger.com/profile/03079923700539671665noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-27246677312494082392012-05-21T17:38:57.891+04:002012-05-21T17:38:57.891+04:00Поведение потоков зависит от того, как выпадут куб...Поведение потоков зависит от того, как <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8" rel="nofollow">выпадут кубики</a>. В данном случае - как планировщик системы выделит время потокам. Вы не можете повлиять на алгоритм планировщика системы. Итого, ответ на "как это изменить" - никак.<br /><br />При этом надо понимать, что:<br />1. 15 может превратиться в другое число в другой версии Windows, где алгоритм планировщика реализован иначе.<br />2. 15 может превратиться в другое число на этой же системе, если по крайне маловероятному (но возможному) стечению обстоятельств система прервёт поток 2 после чтения X (например, в результате запуска третьего потока с высоким приоритетом именно в этот момент и ни тактом раньше или позже).<br /><br />Итого, то, что конкретно в какой-то ситуации получен правильный или неправильный результат - в случае многопоточности ничего не значит. Он может быть правильным в 999 случаях из 1000. <br /><br />Как делать правильно в данном конкретном случае - показано в заметке (InterlockedCompareExchange).GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-45053615556707065932012-05-21T17:23:54.125+04:002012-05-21T17:23:54.125+04:00Как получить другой результат?Как получить другой результат?Romanhttps://www.blogger.com/profile/03079923700539671665noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-84590909010688179902012-05-21T17:22:54.230+04:002012-05-21T17:22:54.230+04:00TThread1.Create(False)
TThread2.Create(False)
у м...TThread1.Create(False)<br />TThread2.Create(False)<br /><br />у меня 15 получається.Romanhttps://www.blogger.com/profile/03079923700539671665noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-50320588944299136672012-03-13T16:28:19.917+04:002012-03-13T16:28:19.917+04:00Так вроде заметка как раз про это?Так вроде заметка как раз про это?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-77694858801601749532012-03-13T16:01:41.279+04:002012-03-13T16:01:41.279+04:00Смешивать Interlocked-ф-ии и критические секции дл...Смешивать Interlocked-ф-ии и критические секции для одной расшаренной области памяти не очень удачная идея ИМХОAnonymousnoreply@blogger.com