> I have been looking and the implementation of channels/alt in Plan9,
> and I have a question.  Does lock()/unlock() work across procs (not
> just threads)?  For example, in channel.c there is a static Lock
> *channel_lock.  Does this provide exclusive to channel data across
> procs?
> 
>  I assume yes, just trying to make sure I'm understanding it
>  correctly.  I was expecting to see code which handles channel access
>  "across procs" differently than channel access between threads "in
>  the same proc", but I didn't see anything like that.

locks are not necessary between threads in the same proc
because only one of them can run at a time and they are
cooperatively scheduled.

the only case that needs to be handled is locking between
procs.  thus there is no special case for locking between
threads regardless of implementation

on the other hand, if you look at the implementation of lock
(/sys/src/libc/port/lock.c), it does not depend on the the
implentation of threads or procs.  it relies on an atomic
tas instruction (or simuation thereof for mips) only.

- erik


Reply via email to