-=ЮрА=- написав:Yola не приймай особисто(хоча ні приймай особисто)я помітив що ти щось питаєш на форумі тобі намагаються допогти, а ти тільки фекаєш та демонструєш мовляв знаєш більше і у такуму плані, повір - це поганий тон у будь якій сфері...
Згоден, це поганий тон, але я таки знаю більше ніж ви. Ну так сталось, без образ. Я буду радий якщо ви з часом переженете. Я кажу це абсолютно щиро.
-=ЮрА=- написав:Проте ми тут про інше - дедлок відбувається, коли два потоки одночасно намагаються дістатися до одного ресурсу
Ні, це не дедлок. Розглянемо приклад:
A: запит на ресурс R. Початок роботи з ресурсом.
B: запит на ресурс R. Перехід в заблокований стан.
A: Завершення роботи з ресурсом. Звільнення ресурсу.
B: Прокидання, отримання ресурсу. Використання ресурсу. Завершення роботи.
Отже, два потоки - A і B, намагались одночасно отримати доступу до ресурсу, але взаємного блокування не відбулось.
-=ЮрА=- написав:(у твоєму випадку кондішин флагу), у разі прибирання локу у першій треді ти маєш неконтрольований доступ до кондішин флагу з боку першої, і лок у другій просто на має сенсу(бо мьютекс завжди буде зайнатий саме нею. При цьому якщо ти не вкажеш для кондішин флагу специфікатор volatile, то можешь взагалі отримати "оптимізацію" від компялтора, коли він для "простоти" розкидає флаг на дві ячійки чи навіть регістра, один для першої, другий для другої треди і будешь працювати взагалі у несинхронному режимі. Якщо проставиш volatile будеш лише час від часу мати або запис на те шо читається або дедлок(!)), але нашо ото мені пояснювати щось людині яка все знає та певна у всьому.
Тут все стало зовсім незрозуміло , можливо ви дійсно знаєте більше ніж я .
Скажу лише, що якщо вважати, і це тут буде логічним припущенням, що readyFlag це bool чи навіть __int128, то у конкретно цьому випадку немає значення як його розкидає по регістрах чи ще десь