淇″彿閲?- semaphore
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了淇″彿閲?- semaphore相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/%e8%b0%83%e7%94%a8' title='璋冪敤'>璋冪敤 鍖呭惈 str 鏃犳晥 ipc 闆嗕腑 鏈夊叧 缁撴灉
涓€. POSIX - 淇″彿閲?/h1>
#include <semaphore.h>
sem_t sem; ///< 淇″彿閲?/span>
#include <semaphore.h> sem_t sem; ///< 淇″彿閲?/span>
淇″彿閲?鍒嗕负鏈夊悕淇″彿閲?鍜屾棤鍚嶄俊鍙烽噺銆?/p>
鏈夊悕淇″彿閲忕敱sem_open/sem_close/sem_unlink鍒涘缓/鍏抽棴/閿€姣侊紝鐢ㄤ簬杩涚▼闂撮€氫俊銆?/p>
鏃犲悕淇″彿閲忕敱sem_init/sem_destroy鍒涘缓/閿€姣侊紝鐢ㄤ簬绾跨▼闂撮€氫俊銆?/p>
1. 淇″彿閲忓垵濮嬪寲
/*********************************************************** * @param[sem] 闈炲懡鍚嶄俊鍙烽噺,鍙兘琚玸em_destroy()閿€姣侊紝 * @param[pshared] 闈?琛ㄧず杩涚▼闂?/strong>閫氫俊淇″彿閲?浣嗘槸Linux绯荤粺鏆傛湭瀹炵幇杩欎竴鍔熻兘(瀹炵幇鏂瑰紡涓哄叡浜唴瀛?,0琛ㄧず绾跨▼闂?/strong>閫氫俊淇″彿閲忋€?* @param[value] 淇″彿閲忓垵濮嬪寲鍊?* @return 鎴愬姛杩斿洖0,澶辫触杩斿洖-1鍙婅缃敊璇爜errno *//********************************************************/ int sem_init(sem_t * sem, int pshared, unsigned vlaue);
/***********************************************************
* @param[sem] 鍛藉悕淇″彿閲?鍙兘琚玸em_close()鍏抽棴 鏈夊悕淇″彿閲忔槸闅忓唴鏍告寔缁殑,瀹炵幇鏄互鍏变韩鍐呭瓨瀹炵幇鐨?
* @param[name] 淇″彿閲忓悕瀛? 鐩稿悓鍚嶅瓧杩斿洖鐩稿悓鐨勪俊鍙烽噺鍦板潃, name鍙傛暟鐨勬瀯閫犳槸浠?nbsp; “ / ” 鍙峰紑澶达紝鍚庨潰璺熺殑瀛楃涓蹭笉鑳藉啀鏈?“ / ” 鍙?/span>
* @param[oflag] 鏍囧織浣?
銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€O_CREAT: 淇″彿閲忎笉瀛樺湪,灏卞垱寤?鍙傛暟mode,value鎵嶆湁鏁?淇″彿閲忓瓨鍦? 璇ユ爣蹇椾綅鏃犳晥
銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€O_EXCL: 涓巓_CREAT杩炵敤,淇″彿閲忓瓨鍦?灏辫繑鍥炲け璐?br />* @param[mode] 鍒涘缓淇″彿閲忕殑鏉冮檺, 渚嬪:0664(鍏繘鍒?
* @param[value] 鍒涘缓淇″彿閲忕殑鍊?* @return 鎴愬姛杩斿洖淇″彿閲忕殑鍦板潃,澶辫触杩斿洖SEM_FAILED鍙婅缃敊璇爜errno
*//********************************************************/
sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
2. 淇″彿閲忛噴鏀惧強鑾峰彇
/********************************************************** * @param[sem] 淇″彿閲?br />* @param[abs_timeout] 鐪熷疄鏃堕棿 * @return 鎴愬姛杩斿洖0,澶辫触杩斿洖-1鍙婅缃敊璇爜errno *//********************************************************/ int sem_post(sem_t * sem); ///< 閲婃斁淇″彿閲? 淇″彿閲忓€?+1 int sem_wait(sem_t * sem); ///< 鑾峰彇淇″彿閲?濡傛灉淇″彿閲忓€间负0, 浼氫竴鐩撮樆濉?鍚﹀垯淇″彿閲忓€?-1,
int sem_trywait(sem_t * sem); ///< 灏濊瘯鑾峰彇淇″彿閲?濡傛灉淇″彿閲忓€间负0,浼氱珛鍗宠繑鍥炲€?骞朵笉浼氶樆濉?br />
int sem_timedwait(sem_t * sem, const struct timespec * abs_timeout); ///< 闄愭椂鑾峰彇淇″彿閲?濡傛灉淇″彿鍊间负0,浼氶樆濉?鎴鏃堕棿鏄痑bs_timeou
3. 閿€姣佷俊鍙烽噺
/*********************************************************** * @brief 鍙兘閿€姣乻em_init鍒涘缓鐨勪俊鍙烽噺 * @param[sem] 淇″彿閲?* @return 鎴愬姛杩斿洖0, 澶辫触杩斿洖-1,骞惰缃敊璇爜errno *//********************************************************/ int sem_destroy(sem_t * sem);
/***********************************************************
* @brief 鍙兘閿€姣乻em_open鍒涘缓鐨勫懡鍚嶄俊鍙烽噺
* @param[sem] 淇″彿閲?* @return 鎴愬姛杩斿洖0, 澶辫触杩斿洖-1,骞惰缃敊璇爜errno
*//********************************************************/
int sem_close(sem_t * sem);
/***********************************************************
* @brief 绉婚櫎鍛藉悕淇″彿閲?/strong>鍜宯ame涔嬮棿鐨勫叧鑱?* @param[sem] 淇″彿閲?* @return 鎴愬姛杩斿洖0, 澶辫触杩斿洖-1,骞惰缃敊璇爜errno
*//********************************************************/
int sem_unlink(const char *name);
浜? System V - 淇″彿閲?/h1>
#include <sys/sem.h>
#include <sys/sem.h>
1. 鍒涘缓淇″彿閲?/p>
/** * @param[key] IPC閿€? 鍙互鐢眆tok()鐢熸垚 * @param[nsems] 淇″彿閲忛泦鍚堜腑鍖呭惈鐨勪俊鍙烽噺鏁扮洰 * @param[semflg] 鏍囧織浣?IPC_CREAT IPC锛縀XCL 0664 * @return 鎴愬姛杩斿洖淇″彿閲忛泦鍚堟爣璇嗙,閿欒杩斿洖-1鍙婅缃敊璇爜errno */ int semget(key_t key, int nsems, int semflg);
2. 淇″彿閲忔搷浣?/p>
/** struct sembuf */ struct sembuf { short sem_num; ///< 淇″彿閲? 鎿嶄綔淇″彿閲忓湪淇″彿闆嗕腑鐨勭紪鍙?缂栧彿浠?寮€濮? short sem_op; ///< 淇″彿閲忔搷浣? P(-1 绛夊緟淇″彿閲? 濡傛灉涓?鍒欓樆濉?, V(+1 閲婃斁淇″彿閲? short sem_flg; ///< 鎿嶄綔鏍囧織浣?IPC_NOWAIT(鎿嶄綔涓嶆弧瓒?涓嶄細闃诲), IPC_UNDO(涓嶇绋嬪簭鏄惁姝e父缁撴潫,淇濊瘉淇″彿閲忓€奸兘涓鸿皟鐢╯emop璋冪敤鍓嶇殑鍊? }; /** * @brief * @param[semid] 淇″彿閲忔爣璇嗙 * @param[sops] 淇″彿閲忔搷浣滄暟缁? * @param[nops] 淇″彿閲忔搷浣滄暟缁勭殑澶у皬 * @return 鎴愬姛杩斿洖0,澶辫触杩斿洖-1鍙婅缃敊璇爜errno */ int semop(int semid, struct sembuf *sops, size_t nops);
3. 淇″彿閲忔帶鍒?/p>
/** union semun */ union semun { int val; struct semid_ds *buf; unsigned short *array; }; /** * @brief 淇″彿閲忔帶鍒? * @param[semid] 淇″彿閲忔爣璇嗙 * @param[semmun]淇″彿閲忛泦鍚堜腑鐨勯『搴忕紪鍙?缂栧彿浠?寮€濮? * @param[cmd]鍛戒护
IPC_STAT 鑾峰彇淇″彿閲忕殑semid_ds缁撴瀯,缁撴灉瀛樻斁鍦ㄧ鍥涗釜鍙傛暟涓殑buf涓?br /> IPC_SET 璁剧疆绗洓涓弬鏁颁腑鐨刡uf鍊?sem_perm.uid, sem_perm.gid, sem_perm.mode)涓轰俊鍙烽噺鏍囪瘑绗︾殑鍊?br /> IPC_RMID 绉婚櫎淇″彿閲?褰撲俊鍙烽噺闆嗗悎涓墍鏈変俊鍙烽噺閮界Щ闄ゅ悗,灏遍攢姣佷俊鍙烽噺闆嗐€?br /> * @param[...] 绗洓涓弬鏁?鍙傛暟缁撴瀯涓簎nion semun,涓€鑸渶瑕佽嚜瀹氫箟 * @return 鎴愬姛杩斿洖涓巆md鏈夊叧鐨勫€? 澶辫触杩斿洖-1鍙婅缃敊璇爜errno */ int semctl(int semid, int semnum, int cmd, ...);
以上是关于淇″彿閲?- semaphore的主要内容,如果未能解决你的问题,请参考以下文章