haiku/headers
Ingo Weinhold b95f6d4710 * Introduced a set of functions (thread_prepare_to_block(),
thread_block(), thread_unblock(),...) that allow a thread to wait for
  something without needing a semaphore or condition variable. It can
  simply block and another thread can unblock it. Supports timeouts and
  interrupting. Both semaphores and condition variables use this
  common mechanism, now.
* Semaphores:
  - Some simplifications due to the thread blocking mechanism.
  - Changed locking order to sem -> thread. It was the other way around
    before and when introducing the wait_for_objects() support I had
    also introduced a situation where the locking was reverse, which
    could potentially cause a dead lock on SMP systems.
  - Instead of queueing thread structures, a semaphore queues
    queued_thread entries now, which are created on the stack. The
    thread::sem structure could thus be removed.
  - Added sem_entry::net_count, which is sem_entry::count plus the
    acquisition count of all waiting threads. This number is needed in
    remove_thread_from_sem() and instead of computing it there we
    maintain it.
  - Fixed remove_thread_from_sem(). It would not unblock threads, if
    the sem count was <= 0.
  - Made sem::last_acquirer unconditional. It is actually needed for
    sem_info::latest_holder. Fixed fill_sem_info() accordingly.
  - Added some optional tracing output, though only via ktrace_printf().
* Condition variables:
  - Could be simplified significantly through the use of the thread
    blocking mechanism. Removed a good deal of unnecessary code.
  - Moved the ConditionVariableEntry "flags" parameter from Wait() to
    Add(), and adjusted all places where condition variables are used
    accordingly.
* snooze() uses thread_block_with_timeout() instead of a semaphore.
* Simplified thread interrupting in the signal and user debugger code.
  Instead of separate functions for threads waiting on a semaphore or
  condititon variable, we only have a single thread_interrupt(), now.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 16:22:42 +00:00
..
build Second stab at reorganizing standard/gcc headers. This time it not only 2008-03-16 17:21:37 +00:00
compatibility/bsd This header is no longer necessary, since Ingo added the BSD timer macros 2008-04-13 02:28:43 +00:00
cpp
glibc Prevent redefinition of _IO_MTSAFE_IO. It is defined when building the 2008-03-22 15:26:55 +00:00
gnu
legacy/network
libs Integrate the USBKit into libdevice and make it public. I left the USBKit.h 2008-04-07 19:24:16 +00:00
os - Implement RemoteDevice::GetFriendlyName() in kit and handle the required reply in the server. 2008-04-19 16:53:06 +00:00
posix * Replaced destructor with destructorFunc to please python - it's not a reserved 2008-04-20 21:20:07 +00:00
private * Introduced a set of functions (thread_prepare_to_block(), 2008-04-22 16:22:42 +00:00
tools