Med IPC för trådlös kryptering med Intel Galileo (6 / 10 steg)
Steg 6: Skriv/Läs funktioner
För att skriva till bufferten, försöker skissa först att minska sem_space med funktionen semop. Den använder en struct (definieras i IPCBuffer.h som sem_up och sem_down) vars tre värden anger index i matrisen semafor (igen, alltid 0 för denna kod), hur mycket vi vill öka (positivt heltal) eller dekrement (negativa heltal) och tillval flaggor, respektive. Det tredje värdet 0 här innebär att processen kommer att blockera om det inte går att minska semaforen (dvs räkningen är på 0).Efter dekrement att sem_space lyckas, vet vi att det finns utrymme för minst en dataenhet. Vi tillåter bara en process för att läsa eller skriva en enda enhet för data i taget annars vi skulle bryta mot tolkningen av den semaphore räkning. Vi vet inte den semaphore värde, bara att det var inte 0 när vi uppmanade sem_space semop. Vi försöker därefter att minska sem_lock. Om den blockerar då det innebär en annan process har tillgång till det delat minnessegmentet. När skissen är unblocked läser det huvudet index och kopiera en bredd till ett värde av byte från minne adresskälla till lämplig plats i delat minne. Huvudet indexet är ökas och skrivs tillbaka till delat minne före uppräkning sem_lock.
Det sista steget är att öka sem_data. Detta gör att andra processer för att se att nya giltiga data har placerats i bufferten. Det är värt att påpeka att vi inte behöver någon ytterligare tillstånd att hantera situationen där värdet huvud och svans är lika. Detta sker både när bufferten är tom och när den är full. Semaforer sem_space och sem_data hålla reda på hur mycket utrymme det är för att data ska läsas från eller skrivas till bufferten. När sem_space når 0, till exempel, innebär detta att bufferten är full och ingen process försöker skriva till bufferten kommer att lyckas förrän en annan process läser ett element från bufferten.
Läs metoden följer samma logik för skriva men det minskar sem_data först och ökar sem_space i slutet tillsammans med med hjälp av svansen index för att läsa från bufferten. Python-skript följer samma mönster för att läsa och skriva bara med API för sysv_ipc modul.