我試圖編寫一個簡單的信號程序,並發現了幾個不同的東西在OSX中。我使用Mountain Lion和最新的Xcode版本。忘記的語法錯誤,缺少大括號的..因爲我有以下更多的代碼,並沒有複製完整的片段,sem_wait POSIX API和OSX
基本上我除了代碼停止與sem_wait,而不是超越。
代碼編譯,並輸出結果如下
追溯錯誤代碼9,它是EBADF
我的計劃是
int main(int argc, char * argv[])
{
pthread_t tid1, tid2;
int rc;
rc = sem_unlink(&mutex);
rc = sem_open(&mutex, O_CREAT,O_RDWR,0);
rc = sem_wait(&mutex);
if(rc == 0) {
printf("Semaphore try wait ok!. \n");
} else {
printf("Semaphore wait failed with ret code: %d, and err: %d. \n",
rc, errno);
}
if(rc != SEM_FAILED) {
printf("Semaphore init ok!. \n");
} else {
printf("Semaphore init failed with ret code: %d, and err: %d. \n",
rc, errno);
return 0;
}
這裏任何幫助是非常寶貴的。
你可以發佈實際編譯的代碼嗎? 'mutex'沒有在任何地方聲明。 'sem_unlink'和'sem_open'採用'char *',而'sem_wait'採用'sem_t *',但是您將相同的值傳遞給所有三個。 'errno'值爲9('EBADF')與將錯誤數據傳遞給'sem_wait'一致。 – bdash 2013-03-02 05:34:51
你正嘗試等待失敗的公開呼叫。可能是互斥體初始化的問題。 – 2013-03-02 05:38:22