亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 11928 | 回復(fù): 10
打印 上一主題 下一主題

[C] pthread_mutex_unlock失敗的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-05-07 21:41 |只看該作者 |倒序?yàn)g覽
本帖最后由 729926317 于 2011-05-07 22:15 編輯

最近在學(xué)POSIX,有些地方不理解
還望大家?guī)蛶兔?br /> 謝了~

unlock失敗我上網(wǎng)找了下應(yīng)該是在當(dāng)前線程不擁有鎖的情況下會(huì)失敗。
然后我這段代碼那個(gè)“Fail”怎么都打印不出來(lái),不知道什么。
  1. #include <pthread.h>
  2. #include <time.h>
  3. #include <unistd.h>
  4. #include <errno.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>


  7. typedef struct my_struct_tag {
  8.     pthread_mutex_t     mutex;  /* Protects access to value */
  9.     int                 value;  /* Access protected by mutex */
  10. } my_struct_t;

  11. my_struct_t data = {
  12.     PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0};


  13. void *wait_thread (void *arg)
  14. {
  15.     int status;
  16.     status = pthread_mutex_lock (&data.mutex);
  17.     sleep (5);//等待5秒,讓另一個(gè)線程解鎖互斥量,來(lái)造成解鎖失敗
  18.     status = pthread_mutex_unlock (&data.mutex);
  19.     return NULL;
  20. }

  21. int main (int argc, char *argv[])
  22. {
  23.     int status;
  24.     pthread_t wait_thread_id;
  25.     struct timespec timeout;

  26.     status = pthread_create (&wait_thread_id, NULL, wait_thread, NULL);
  27.     sleep(1);//等待1秒,讓其他線程鎖住互斥量
  28.     status = pthread_mutex_unlock (&data.mutex);
  29.     printf("%d\n",status);
  30.     if(status!=0)
  31.     {
  32.         printf("Fail\n");
  33.     }

  34.     return 0;
  35. }
復(fù)制代碼
status輸出顯示是0
解鎖成功?!。。。不可能啊

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-05-07 22:08 |只看該作者
“unlock失敗我上網(wǎng)找了下應(yīng)該是在當(dāng)前線程不擁有鎖的情況下會(huì)失敗”這個(gè)是錯(cuò)的.
posix,我也不知道。。

論壇徽章:
1
天蝎座
日期:2013-12-06 18:23:58
3 [報(bào)告]
發(fā)表于 2011-05-07 22:09 |只看該作者
本帖最后由 crazyhadoop 于 2011-05-07 22:16 編輯

sleep(1);//等待1秒,讓其他線程鎖住互斥量  你確定其它進(jìn)程可以來(lái)解鎖?

status = pthread_mutex_unlock (&data.mutex); 你能確定是哪個(gè) unlock出錯(cuò)了嗎?
這個(gè)不對(duì)稱必然有錯(cuò)


www.crazyhadoop.com

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-05-07 22:16 |只看該作者
回復(fù) 2# peidright

http://www.mkssoftware.com/docs/man3/pthread_mutex_unlock.3.asp

這上面是這個(gè)意思。起碼在當(dāng)前線程不擁有互斥量的時(shí)候,解鎖是會(huì)失敗的。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-05-07 22:22 |只看該作者
回復(fù) 3# crazyhadoop

我讓另一個(gè)線程sleep 5秒就是為了讓main的這個(gè)線程來(lái)解鎖。

而在不擁有該互斥量的時(shí)候,線程對(duì)該互斥量的解鎖是會(huì)失敗的 http://www.mkssoftware.com/docs/man3/pthread_mutex_unlock.3.asp

我就是想捕捉到這個(gè)失敗

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-05-07 22:33 |只看該作者
If the mutex type is PTHREAD_MUTEX_NORMAL, error detection is not provided. If a thread attempts to unlock a mutex that is has not locked or a mutex which is unlocked, undefined behavior results.

評(píng)分

參與人數(shù) 1可用積分 +2 收起 理由
JohnBull + 2 我很贊同

查看全部評(píng)分

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-05-08 12:16 |只看該作者
回復(fù) 6# peidright


我在create線程之后買(mǎi)了線程sleep了1秒就是讓剛剛創(chuàng)建的線程來(lái)鎖住mutex
然后用main線程去解鎖

這個(gè)時(shí)候這個(gè)互斥量應(yīng)該已經(jīng)被創(chuàng)建的鎖住了

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2011-05-08 18:10 |只看該作者
代碼編譯通不過(guò)
tt.c:41: warning: braces around scalar initializer
tt.c:41: warning: (near initialization for ‘data.value’)
環(huán)境:
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2011-05-08 20:25 |只看該作者
暈...失敗才是正確的,你成功了才怪呢

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2011-05-08 23:42 |只看該作者
6樓正解
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP