Bu örnekte, bir değişkenin değerinin değiştirilmesi sırasında bir sinyal yakalama işlevinin araya girdiği durum gösterilmiştir. (Bir değişkenin okunması sırasında kesintiye uğratılması mantıksız sonuçlara sebep olabilir, ama burada sadece yazma olayı gösterilmiştir.)
#include <signal.h>
#include <stdio.h>
volatile struct two_words { int a, b; } memory;
void
handler(int signum)
{
printf ("%d,%d\n", memory.a, memory.b);
alarm (1);
}
int
main (void)
{
static struct two_words zeros = { 0, 0 }, ones = { 1, 1 };
signal (SIGALRM, handler);
memory = zeros;
alarm (1);
while (1)
{
memory = zeros;
memory = ones;
}
}
Yazılım, memory değişkenini sırayla sıfırlarla ve birlerle doldurmaktadır. Bu sırada her saniyede bir, alarm sinyalinin yakalayıcısı o anki içeriği basmaktadır. (Eylemci içinde printf kullanımı, sinyal oluştuğu sırada printf eylemci dışında çağrılmadığından bu kod için sorun çıkarmaz.)
Başka bir deyişle yazılım sıfır ya da bir çiftlerinde birini basar. Ama bu iş tamamen bizim istediğimiz gibi olmaz! Çoğu makinede, memory değişkeninde yeni değerin saklanması bir makine komutundan fazlasına ihiyaç duyar. Bu komutların çağrılması sırasında bir sinyal alınırsa, eylemci memory.a için 0, memory.b için 1 ya da tersini basabilir (Normalde ikisi de aynı olmalıydı).
Bazı makineler, işlemi tek bir makine kodu ile yapabilir ve bu durumda eylemci daima sıfır ya da bir çiftleri basar.