LINUX.ORG.RU

Сообщения visla_vi

 

[Perl][Threads] Как попасть в deadlock?

Пытаюсь организовать deadlock из познавательного интереса. Вот немного улучшенный пример из perlthtut (http://perldoc.perl.org/perlthrtut.html#A-Thread-Pitfall:-Deadlocks):

#!/usr/bin/perl
use threads;
use feature 'say';

my $a :shared = 4;
my $b :shared = 'foo';

my $thr1 = threads->create(sub {
	{
		lock $a  &&  say "thr1: \$a locked";
		sleep 3;
		lock $b  &&  say "thr1: \$b locked";
	}
	say "thr1: \$a unlocked";
	say "thr1: \$b unlocked";
});

sleep 1;

my $thr2 = threads->create(sub {
	{
		lock $b  &&  say "thr2: \$b locked";
		lock $a  &&  say "thr2: \$a locked";
	}
	say "thr2: \$a unlocked";
	say "thr2: \$b unlocked";

});

$thr1->join();
$thr2->join();

Казалось бы, гарантированный deadlock и обе нити должны замереть на вечность в ожидании блокировки. Но не тут-то было. Не виснет вообще ни разу! :/

При запуске получаем:

thr1: $a locked
thr2: $b locked
thr2: $a locked
thr2: $a unlocked
thr2: $b unlocked
thr1: $b locked
thr1: $a unlocked
thr1: $b unlocked

То есть, $thr2 получает блок на $a, хотя она в это время заблокирована из $thr1.
Как так? :)

P.S.

shovel@r2d2> perl -v | head -2

This is perl 5, version 12, subversion 4 (v5.12.4) built for i486-linux-gnu-thread-multi-64int
OC: Debian testing

 

visla_vi
()

[javascript][opera] Яндекс-счётчик грузит проц

Заметил, что опера кушает проц (10-20%), даже когда её не трогаю. Вкладок с флешем не открыто.

Нашёл пример страницы, ответственной за нагрузку: http://www.csedays.ru/application2011/training-projects/agent-based-modeling

Если выпилить из страницы код яндекс-счётчика, то проц приходит в покой.


<!-- Yandex.Metrika counter -->
<div style="display:none;"><script type="text/javascript">
                               (function (w, c) {
                                   (w[c] = w[c] || []).push(function () {
                                       try {
                                           w.yaCounter8017348 = new Ya.Metrika({ id: 8017348, enableAll: true });
                                       }
                                       catch (e) { }
                                   });
                               })(window, 'yandex_metrika_callbacks');
</script></div>

<script src="//mc.yandex.ru/metrika/watch_visor.js" type="text/javascript" defer="defer"></script>
<noscript><div><img src="//mc.yandex.ru/watch/8017348" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

Chromium на этой же странице использует 0% cpu Iceweasel — около 5%

Отправил баг в багзиллу оперы.

Посоветуйте, как жить дальше :D

 ,

visla_vi
()

RSS подписка на новые темы