Pelo menos na minha versão do Linux, parece que você pode usar bloqueios obrigatórios. Eu testei apenas com /dev/null
, mas não vejo nenhum motivo para não funcionar com outros dispositivos, como os buffers de quadros:
Como root:
mount -t tmpfs -o mand locked-fb some-dir
cp -a /dev/fb0 some-dir/fb0-for-process-A
cp -a /dev/fb0 some-dir/fb0-for-process-B
chmod g+s some-dir/fb0-for-process-[AB] # enable mand-lock
Então, por exemplo, usando perl
e o módulo File::FcntlLock
(ou faça isso diretamente em C):
#! /usr/bin/perl
use File::FcntlLock;
$l = new File::FcntlLock;
$l->l_type(F_RDLCK);
open my $fba, '<', 'some-dir/fb0-for-process-A' or die$!;
sleep 10; # writing OK
$l->lock($fba, F_SETLK); # writing blocked on fb0-for-process-A
sleep 10;
exit; # lock now released (or do an explicit unlock)
Faça um processo abrir o dispositivo fb0 através do arquivo fb0-for-process-A
e o outro via fb0-for-process-B
e aplique o bloqueio a ambos os arquivos para decidir qual processo pode gravar em um determinado momento.