|
|
|
Data race, race condition и корректно синхронизированная программа
|
|||
|---|---|---|---|
|
#18+
Коллеги, 1) Что такое dara race? А что такое race condition? Это одно и тоже или нет? Если нет, то в чем отличие? 2) Какую практическую ценность имеет понятие data race? 3) Если в программе нет data race'ов, то он считается корректно синхронизированной. Означает ли это, что программа корректно работает в многопоточном окружении? Если нет, то какоеа практическая ценность понятия "корректно синхронизированная программа"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 11:14:48 |
|
||
|
Data race, race condition и корректно синхронизированная программа
|
|||
|---|---|---|---|
|
#18+
DEVcoach, Почти все ответы на ваши вопросы есть в JLS, Chapter 17 "Threads and Locks". Читайте. Что такое dara race? Наличие двух конфликтующих (чтение/запись) обращений к одной и той же переменной, не связанных при этом happens-before ordership. JSL 17.4.1, JLS 17.4.5 А что такое race condition? А это когда поведение программы зависит от того, в каком порядке выполнились определенные части кода. Например, один поток может открывать поток (fileinputstream, например), а второй читает из этого потока. При этом потоки могут быть прекрасно синхронизированы на обращение (и открытие, и чтение - в syncrhonized-блоке), но порядок выполнения операций (открытие/чтение) строго не задан. А еще есть гонки со внешней средой. Когда сначала файл проверятеся на наличие, а потом читается (и может быть удален в момент между проверкой и чтением). Это одно и тоже или нет? Если нет, то в чем отличие? Совершенно разные вещи. См. выше. Причем даже при наличии data race программа может не иметь race condition (и наоборот). И race condition в JLS не определен, только data race. Какую практическую ценность имеет понятие data race? Зависит от конкретной программы. В целом определяет, какие забавные эффекты можно увидеть (и можно ли ими пренебречь). Если в программе нет data race'ов, то он считается корректно синхронизированной. Означает ли это, что программа корректно работает в многопоточном окружении? Нет конечно. Программа может работать некорректно даже в однопоточном окружении. Никакая спецификация вам корректность не гарантирует. Для этого используются верификаторы, unit-тесты и все остальное. В частности, correctly synchronized program может содержать race conditions. Если нет, то какова практическая ценность понятия "корректно синхронизированная программа"? Большая. Корректно-синхронизированная программа по определению является sequentially consistent. Т.е. в любом total order процесса выполнения все прочитанные значения - самые новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2013, 10:20:57 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2128760]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
40ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 279ms |
| total: | 433ms |

| 0 / 0 |
