2015-03-12 4 views
0
lock (%{$j{$t}}); 
@keys = sort {${$j{$t}}{$a}{stime} cmp ${$j{$t}}{$b}{stime} 
        } keys %{$j{$t}}; 

Я получаю «Недопустимое значение для общего скаляра» при сортировке.
Я заметил, что получаю эту ошибку, если $ j {$ t}} {$ a} не существует i.e. удаляется при сортировке по другому потоку.perl многопоточность: блокировка для предотвращения состояния гонки

Doesnt lock (%{$j{$t}}); предотвращает удаление ключа в хеше?

+1

'$ {$ j {$ t}} {$ a} {stime}' гораздо отчетливее написано '$ j {$ t} -> {$ a} -> {stime}' или '$ j { $ т} {$ а} {STIME} '. Это также помогло бы использовать значимые имена переменных. 'j',' a' и 't' ничего не значит для меня. – Borodin

+0

зная, что переменные не имеют отношения к заданному вопросу – ealeon

+2

Я замечаю, что слово «консультативный» выделено жирным шрифтом в http://perldoc.perl.org/threads/shared.html#lock-VARIABLE. Вы уверены, что ваша другая нить пытается получить собственный замок? – tjd

ответ

3

Я заметил, что слово «консультативный» выделено жирным шрифтом в lock's documentation. Убедитесь, что ваша другая нить пытается получить свой собственный замок.

Смежные вопросы