⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread_semaphore.h

📁 多线程库
💻 H
字号:
#ifndef __THREADS_SEMAPHORE_H#define __THREADS_SEMAPHORE_H#include <thread_attributes.h>#include <thread_spinlock.h>class wait_queue;/** * A semaphore, it functions in much a similar way as a mutex * does, but with some exceptions. * * @author Orn E. Hansen <oe.hansen@gamma.telenordia.se> * @short Implements a semaphore, for thread synchronisation. */class semaphore { protected:  static char *s_project;  int s_id;  wait_queue *s_waiting;  attributes::scope s_scope;  struct storage {    int s_magic;    spinlock s_sync;    int s_count;  } *_s; public:  semaphore(attributes::scope);  semaphore(attributes::scope, int);  semaphore();  semaphore(int);  ~semaphore();  /**   * Increment the semaphore count, the top most blocking thread on   * the waiting list is restarted.   *   * @return The updated value, of the semaphore count.   */  int post();  /**   * Block the calling process, until the semaphore count becomes   * greater than 1, then atomically decrement it.   *    * @return The current count of the semaphore.   */  int wait();  /**   * Decrement the count, if it is greater than zero.  This is a   * non-blocking call.   *   * @return The count of the semaphore after decrement, or -1 not.   */  int trywait();  /**   * The shared memory scheme, wants a single name to identify the   * overall program.  It is possible, and perhaps desired that   * part cond/mutex/semaphore have their own name identification   * tree.  This is possible, by stating that it should be branch   * of the main file name, with a give extension.   *   * <pre>   * main()   * {   *   semaphore *sv;   *   *   pthread::set_project( "my_project" );   *   semaphore::project_par( "sem" );   *   sv = new semaphore(attributes::process_shared);   *   ...   * }   * </pre>   *   * This will set the project to my_project, and all semaphores   * will be derived from my_project_sem.   *   * @param part A C string containing the semaphore part name.   */  static void project_part(const char *);};#endif /* __THREADS_SEMAPHORE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -