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

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

Chinaunix

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

請(qǐng)教下怎樣把進(jìn)程中的某一個(gè)線程給停住【NPTL庫】 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-04-02 15:47 |只看該作者 |倒序?yàn)g覽
我通過pthread_create創(chuàng)建了一個(gè)線程,然后想讓這個(gè)線程停住。

由于使用的是NPTL庫,所以想到了tkill系統(tǒng)調(diào)用。但是現(xiàn)在通過tkill發(fā)送一個(gè)SIGSTOP信號(hào)給線程之后,整個(gè)線程組中的所有線程都停下來了。
請(qǐng)問一下怎樣才可以使進(jìn)程中的某一個(gè)線程停住?(聽別人說tkill系統(tǒng)調(diào)用可以,可我怎么試都不行呢?)

謝謝先。

附我的測(cè)試代碼:

A:多線程程序:

  1. static void test_task_print()
  2. {
  3.         while(1) {
  4.                 printf("Task  is executingn" );
  5.                 sleep(5);
  6.         }
  7. }



  8. int main(int argc, char *argv[])
  9. {
  10.         int tid;
  11.         pthread_t t;


  12.         pthread_create(&t, NULL, test_task_print, NULL);

  13.         while(1) {
  14.                 sleep(250);
  15.         }

  16.         return 0;
  17. }
復(fù)制代碼



B:信號(hào)發(fā)送程序

  1. int main(int argc, char *argv[])
  2. {
  3.         int tid;

  4.         if (argc != 2) {
  5.                 printf("usage: ./kill_send sig\n");
  6.                 return -1;
  7.         }

  8.         tid = atoi(argv[1]);

  9.         syscall(__NR_tkill, tid, SIGSTOP);
  10.         printf("send signal to thread %d\n", tid);

  11.         return 0;
  12. }
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-04-02 16:22 |只看該作者
用mutex可以解決

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-04-02 17:08 |只看該作者
哦,謝謝先。

請(qǐng)問下通過mutex怎么做啊,可不可以簡(jiǎn)單說下思路。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-04-02 17:32 |只看該作者
可以使用pthread_kill 實(shí)現(xiàn)你需要的,不過樓上說mutex,請(qǐng)問怎么做?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-04-02 19:37 |只看該作者
對(duì)于NPTL庫,實(shí)驗(yàn)時(shí)發(fā)現(xiàn)通過pthread_kil發(fā)送SIGSTOP信號(hào)l會(huì)把所有線程都停住。查了下資料,說NPTL處理信號(hào)是進(jìn)程相關(guān)的,所以會(huì)停住。在linux thread庫中pthread_kill可以工作。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-04-02 19:46 |只看該作者
原帖由 richardhesidu 于 2009-4-2 16:22 發(fā)表
用mutex可以解決


不知道是不是指的掛起任務(wù)的時(shí)候獲取一個(gè)信號(hào)量,然后來把線程掛起?

如果這樣的話,掛起當(dāng)前線程應(yīng)該是可以的,但是如果要掛起其他線程好像不行?

[ 本帖最后由 wiseker 于 2009-4-2 19:52 編輯 ]

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [報(bào)告]
發(fā)表于 2009-04-03 09:14 |只看該作者

回復(fù) #1 wiseker 的帖子

我沒看到你怎么獲取這個(gè)創(chuàng)建的thread的id的,線程機(jī)制里面是可以給thread發(fā)信號(hào)的,但如果你給進(jìn)程發(fā)信號(hào),會(huì)直接干掉這個(gè)線程組的

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-04-03 09:47 |只看該作者
我覺得可以利用條件變量啊, 只要你不broadcast ,那么這個(gè)線程不就一直是停止的?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-04-03 09:57 |只看該作者
原帖由 dreamice 于 2009-4-3 09:14 發(fā)表
我沒看到你怎么獲取這個(gè)創(chuàng)建的thread的id的,線程機(jī)制里面是可以給thread發(fā)信號(hào)的,但如果你給進(jìn)程發(fā)信號(hào),會(huì)直接干掉這個(gè)線程組的


threadid是作為參數(shù)輸入的。我是通過proc文件系統(tǒng)獲取的這個(gè)ID。發(fā)送信號(hào)的時(shí)候,ID不是group ID。

由于linux中ID是每次遞增一的,所以也可以猜測(cè)出來。

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-04-03 09:59 |只看該作者
原帖由 star316 于 2009-4-3 09:47 發(fā)表
我覺得可以利用條件變量啊, 只要你不broadcast ,那么這個(gè)線程不就一直是停止的?


請(qǐng)問一下可不可以簡(jiǎn)單說下呢?

通過條件變量,我只知道suspend當(dāng)前線程,但是如果要suspend另外線程怎么做呢?比如有兩個(gè)線程t1和t2,他們位于相同的線程組,怎么讓t1 suspend t2呢?
您需要登錄后才可以回帖 登錄 | 注冊(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)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP