淇″彿閲?- 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>

淇″彿閲?鍒嗕负鏈夊悕淇″彿閲?鍜屾棤鍚嶄俊鍙烽噺銆?/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>

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的主要内容,如果未能解决你的问题,请参考以下文章

idea出现 淇℃伅 乱码

IDEA启动tomcat时出现乱码——淇℃伅

配置1-tomcat出现“淇℃伅”

Semaphore 源码解读

Tomcat启动中文乱码,淇℃伅等

ssh淇敼绔彛

(c)2006-2024 SYSTEM All Rights Reserved IT常识