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}});
предотвращает удаление ключа в хеше?
'$ {$ j {$ t}} {$ a} {stime}' гораздо отчетливее написано '$ j {$ t} -> {$ a} -> {stime}' или '$ j { $ т} {$ а} {STIME} '. Это также помогло бы использовать значимые имена переменных. 'j',' a' и 't' ничего не значит для меня. – Borodin
зная, что переменные не имеют отношения к заданному вопросу – ealeon
Я замечаю, что слово «консультативный» выделено жирным шрифтом в http://perldoc.perl.org/threads/shared.html#lock-VARIABLE. Вы уверены, что ваша другая нить пытается получить собственный замок? – tjd