Atomicity and semaphores
update Oct 22, 2017 15:19
Kinds of atomicity
synthetic (voluntary) atomicity: programs and/or threads obey locking to avoid operating at the same time.
kernel atomicity: when a system call is executing, the scheduler won't interrupt it.
instruction atomicity: some machine instructions preclude concurrent operations.
special-purpose system calls: some specific system calls execute program instructions in an atomic (uninterruptible) fashion.
Kinds of locks
Between threads: mutexes
user mode (except when they block!)
exploit shared memory
binary: locked or unlocked
Between threads: unnamed semaphores
user mode (except when they block!)
exploit shared memory
they're integers
Unlimited numbers available.
Between processes: named semaphores
kernel mode: live in kernel memory.
no shared memory.
They're integers. An array offset in a kernel table.
Limited number available.
Between machines: network semaphores
network objects
use network communications
no shared architecture.
What is a mutex
Basically, one word of user memory.
Utilize a simple race condition to acquire lock, based upon atomicity of operations in assembly language. If the word of memory is > 0, then a lock has been acquired.
If the word of memory == 0, then there is no lock.
Testset: if word==0 then word=1 as an atomic operation.
what is a semaphore
A semaphore is an integer to which access is atomic.
Initialized to some integer value.
locks decrement it.
unlocks increment it.
value determines number of concurrent locks available.
Mutex versus semphores
- Mutexes can only be locked or unlocked, they are sometimes called "binary semaphores".
- Semaphores have an integer value that is the number of locks available. Can read a semaphore's value via sem_getvalue(&sem,&val) where val is an int.