PSERIALIZE(9) BSD Kernel Developer's Manual PSERIALIZE(9)NAMEpserialize — passive serialization mechanism
SYNOPSIS
#include <sys/pserialize.h>
pserialize_t
pserialize_create(void);
void
pserialize_destroy(pserialize_t psz);
int
pserialize_read_enter(void);
void
pserialize_read_exit(int s);
void
pserialize_perform(pserialize_t psz);
DESCRIPTION
Passive serialization is a reader / writer synchronisation mechanism
designed for lock-less read operations. The read operations may happen
from software interrupt at IPL_SOFTCLOCK.
FUNCTIONSpserialize_create()
Allocate a new synchronisation object.
pserialize_destroy()
Destroy the synchronisation object. No synchronisation activity
should happen at this point.
pserialize_read_enter()
Enter the critical path of the reader side. Returns an IPL
value, which must be passed to pserialize_read_exit(9). Pro‐
tected code path is not allowed to block.
pserialize_read_exit()
Exit the critical path of the reader side. Takes the IPL value
returned by pserialize_read_enter(9).
pserialize_perform()
Perform the passive serialization on the writer side. Passing
of this function ensures that no readers are in action. Writers
must be additionally serialized with a separate mechanism, e.g.
mutex(9). Operation blocks and it may only be performed from
thread context.
EXAMPLES
Typical code fragment in the writer side:
mutex_enter(&writer_psz_lock);
/*
* Perform the updates (e.g. remove data items from a list).
*/
...
pserialize_perform(object->psz);
/*
* At this point it is safe to destroy old data items.
*/
mutex_exit(&writer_psz_lock);
CODE REFERENCES
The pserialize is implemented within the file sys/kern/subr_pserialize.c.
SEE ALSOmembar_ops(3), condvar(9), mutex(9), rwlock(9)
Hennessy, et al., Passive serialization in a multitasking environment, US
Patent and Trademark Office, US Patent 4809168, February 28, 1989.
HISTORY
Passive serialization mechanism first appeared in NetBSD 6.0.
BSD July 30, 2011 BSD