Я снова хочу невозможного в Perl :(
А именно (речь идёт о Linux, только о Linux, и да, мне абсолютно срать хотелось на переносимость кода в какую-либо иную ОС) :
1) Хочу, чтобы в виртуальное адресное пространство процессов отображалась одна и та же физическая страница
2) Хочу чтобы где-либо на этой странице памяти нашлось место для одного-единственного байта
3) Хочу, чтобы в этот байт можно было делать некий аналог ассемблерного BTS (bit-test-and-set): чтобы атомарным образом содержимое бита сначала сохранялось, а потом тут же устанавливалось
4) Таким образом у меня были бы целых 8 флагов, которые я мог бы использовать для блокировки процессов от повторного запуска: по сохранённому биту я бы определял, была ли блокировка, а если её не было - то я бы изменял значение бита на 1 и последующие инстансы уже не смогли бы сделать те или иные пакости.
Ура?
Подозреваю, что нет.
Мне кажется, и меня это немного пугает, что в Perl5 принято делать блокировки файлами, а гвозди забивать микроскопом, для обладания которым нужно сдать экзамен по вождению марсохода (намекаю на геморрой с правами и путями на любой ФС). Я прав?
P.S. Я пробовал IPC::ShareLite: мало того, что оно вообще не о том (мне НЕ нужно блокировать ресурс в shared memory, у меня самоцель - сам lock), так ещё и работает в на скорую руку состряпаннях тестах - весьма странно (flock вёл себя куда адекватнее).