青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

POSIX 線程 – pthread_sigmask

Posted on 2009-11-17 19:56 Prayer 閱讀(6398) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): LINUX/UNIX/AIX
POSIX 線程 – pthread_sigmask

POSIX 線程 – pthread_sigmask

 


  概念

  • 按照 POSIX, 異步 (外部) 信號(hào)發(fā)送到整個(gè)進(jìn)程.
  • 所有線程共享同一個(gè)設(shè)置, 即通過(guò) sigaction 設(shè)置的線程處置方法.
  • 每個(gè)線程有自己的信號(hào)掩碼, 線程庫(kù)根據(jù)該掩碼決定將信號(hào)發(fā)送到哪個(gè)線程.
  • 由于 Linux 線程實(shí)現(xiàn)上的獨(dú)特性, 外部信號(hào)始終發(fā)送到特定的線程.

  pthread_sigmask

  • pthread_sigmask 用來(lái)定義線程的信號(hào)掩碼
  • 其接口與 sigprocmask 一樣
    ===============================================================================
    #include <pthread.h>
    #include <signal.h>

    int pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask);
    ===============================================================================

  pthread_kill 和 sigwait

===============================================================================
#include <pthread.h>
#include <signal.h>

int pthread_kill (pthread_t thread, int signo);
int sigwait (const sigset_t *set, int *sig);
===============================================================================
  • pthread_kill 向特定的線程發(fā)送信號(hào).
  • sigwait 暫定調(diào)用線程, 直到 set 中定義的某個(gè)信號(hào)遞達(dá)調(diào)用線程.
  • sigwait 返回時(shí), sig 中保存的是接收到的信號(hào)編號(hào).
  • sigwait 所等待的信號(hào)必須在所有線程中阻塞, 而不僅僅是調(diào)用線程. 在多線程的程序里,希望只在主線程中處理信號(hào),可以使用

 

函數(shù):

int pthread_sigmask (int how,

const sigset_t *set,

sigset_t *oset)


     
用作在主調(diào)線程里控制信號(hào)掩碼。

 

How:

SIG_BLOCK:     結(jié)果集是當(dāng)前集合參數(shù)集的并集
SIG_UNBLOCK: 
結(jié)果集是當(dāng)前集合參數(shù)集的差集
SIG_SETMASK: 
結(jié)果集是由參數(shù)集指向的集

 

頭文件: <signal.h>

錯(cuò)誤:   [EINVAL] how不是已定義值
提示:   除非信號(hào)在所有的線程里都阻塞,否則總能將異步信號(hào)傳輸給這個(gè)進(jìn)程。

例子:

#include <pthread.h>

#include <stdio.h>

#include <sys/signal.h>

 

#define NUMTHREADS 3

void sighand(int signo);

 

void *threadfunc(void *parm)

{

    pthread_t             tid = pthread_self();

    int                   rc;

 

    printf("Thread %u entered\n", tid);

    rc = sleep(30);

    printf("Thread %u did not get expected results! rc=%d\n", tid, rc);

    return NULL;

}

 

void *threadmasked(void *parm)

{

    pthread_t             tid = pthread_self();

    sigset_t              mask;

    int                   rc;

 

    printf("Masked thread %lu entered\n", tid);

 

    sigfillset(&mask); /* Mask all allowed signals */

    rc = pthread_sigmask(SIG_BLOCK, &mask, NULL);

    if (rc != 0)

    {

        printf("%d, %s\n", rc, strerror(rc));

        return NULL;

    }

 

    rc = sleep(15);

    if (rc != 0)

    {

        printf("Masked thread %lu did not get expected results! "

                       "rc=%d \n", tid, rc);

        return NULL;

    }

    printf("Masked thread %lu completed masked work\n",

                tid);

    return NULL;

}

 

int main(int argc, char **argv)

{

    int                     rc;

    int                     i;

    struct sigaction        actions;

    pthread_t               threads[NUMTHREADS];

    pthread_t               maskedthreads[NUMTHREADS];

 

    printf("Enter Testcase - %s\n", argv[0]);

 

    printf("Set up the alarm handler for the process\n");

    memset(&actions, 0, sizeof(actions));

    sigemptyset(&actions.sa_mask);

    actions.sa_flags = 0;

    actions.sa_handler = sighand;

 

    rc = sigaction(SIGALRM,&actions,NULL);

 

    printf("Create masked and unmasked threads\n");

    for(i=0; i<NUMTHREADS; ++i)

    {

        rc = pthread_create(&threads[i], NULL, threadfunc, NULL);

        if (rc != 0)

        {

            printf("%d, %s\n", rc, strerror(rc));

            return -1;

        }

 

        rc = pthread_create(&maskedthreads[i], NULL, threadmasked, NULL);

        if (rc != 0)

        {

            printf("%d, %s\n", rc, strerror(rc));

            return -1;

        }

    }

 

    sleep(3);

    printf("Send a signal to masked and unmasked threads\n");

    for(i=0; i<NUMTHREADS; ++i)

    {

        rc = pthread_kill(threads[i], SIGALRM);

 

        rc = pthread_kill(maskedthreads[i], SIGALRM);

    }

 

    printf("Wait for masked and unmasked threads to complete\n");

    for(i=0; i<NUMTHREADS; ++i) {

        rc = pthread_join(threads[i], NULL);

 

        rc = pthread_join(maskedthreads[i], NULL);

    }

    printf("Main completed\n");

    return 0;

}

 

void sighand(int signo)

{

    pthread_t             tid = pthread_self();

 

    printf("Thread %lu in signal handler\n",

                             tid);

    return;

}

程序返回:

Enter Testcase - ./pthread_sigmask_test

Set up the alarm handler for the process

Create masked and unmasked threads

Thread 3086597040 entered

Masked thread 3076107184 entered

Thread 3065617328 entered

Masked thread 3055127472 entered

Thread 3044637616 entered

Masked thread 3034147760 entered

Send a signal to masked and unmasked threads

Wait for masked and unmasked threads to complete

Thread 3086597040 in signal handler

Thread 3086597040 did not get expected results! rc=27

Thread 3065617328 in signal handler

Thread 3065617328 did not get expected results! rc=27

Thread 3044637616 in signal handler

Thread 3044637616 did not get expected results! rc=27

Masked thread 3076107184 completed masked work

Masked thread 3055127472 completed masked work

Masked thread 3034147760 completed masked work

Main completed

Feedback

# re: POSIX 線程 – pthread_sigmask   回復(fù)  更多評(píng)論   

2010-03-27 12:43 by yswzing
可能有 race,pthread_kill 的時(shí)候 masked 線程可能還沒(méi)有執(zhí)行 pthread_sigmask 調(diào)用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲网站在线播放| 国产精品免费小视频| 亚洲黄色免费网站| 久久综合亚州| 欧美高潮视频| 亚洲欧美电影在线观看| 亚洲欧美日韩在线一区| 一区二区三区在线高清| 欧美a级片一区| 欧美日韩国产综合一区二区 | 欧美成人乱码一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美成人精品在线观看| 欧美人体xx| 欧美在线观看www| 狂野欧美激情性xxxx| 亚洲视频在线观看网站| 欧美一级片在线播放| 91久久国产综合久久蜜月精品 | 一区二区三区回区在观看免费视频| 欧美视频在线免费看| 久久久蜜桃精品| 欧美激情四色| 久久久精品tv| 欧美日韩国产首页在线观看| 久久不射中文字幕| 欧美激情二区三区| 久久久精品国产免大香伊 | 久久久免费精品视频| av成人毛片| 久久久在线视频| 午夜国产不卡在线观看视频| 久久一区欧美| 久久国产精品久久久久久电车| 欧美成人精品不卡视频在线观看| 欧美亚洲三区| 欧美日韩久久不卡| 免播放器亚洲一区| 国产麻豆精品久久一二三| 亚洲电影观看| 好吊视频一区二区三区四区 | 欧美国产日韩精品| 国产亚洲在线| 亚洲欧美久久久| 亚洲私拍自拍| 欧美久久久久免费| 亚洲高清久久网| 在线成人av| 性欧美暴力猛交69hd| 亚洲一区影音先锋| 欧美日韩精品综合| 亚洲欧洲一区二区三区| 亚洲高清一区二| 久久综合久久久久88| 久久中文在线| 今天的高清视频免费播放成人 | 欧美激情一区二区三区高清视频 | 欧美激情欧美狂野欧美精品| 欧美成人官网二区| 亚洲第一黄网| 欧美成人精品1314www| 欧美夫妇交换俱乐部在线观看| 韩国在线一区| 久色成人在线| 亚洲第一精品福利| 亚洲三级免费观看| 欧美日本久久| 一本色道婷婷久久欧美| 亚洲中字在线| 国产欧美综合在线| 久久成人精品| 欧美大片专区| 亚洲美女中文字幕| 欧美日韩一级大片网址| 夜夜夜久久久| 久久激情五月激情| 影音先锋久久| 欧美精品97| 亚洲午夜女主播在线直播| 久久不见久久见免费视频1| 国产综合色产在线精品| 久久综合五月| 艳女tv在线观看国产一区| 亚洲一区二区在线免费观看| 国产欧美亚洲精品| 久热综合在线亚洲精品| 亚洲精品一级| 久久精品国产v日韩v亚洲| 亚洲国产成人久久| 国产精品狼人久久影院观看方式| 午夜精品久久久久久久久久久久| 久久中文字幕导航| 一区二区三区国产在线| 国产欧美日韩综合一区在线观看 | 久久精品女人| a4yy欧美一区二区三区| 久久午夜国产精品| 在线一区二区三区四区五区| 国产欧美日韩另类视频免费观看| 久久视频在线视频| 国产精品99久久99久久久二8| 久久久水蜜桃| 亚洲尤物在线| 亚洲精品九九| 韩日成人在线| 国产精品久久99| 欧美电影在线免费观看网站| 亚洲欧美一区二区三区久久| 欧美黄色一区二区| 久久99在线观看| 正在播放欧美视频| 亚洲国产高清高潮精品美女| 国产精品福利网| 欧美高清视频免费观看| 久久精品国产999大香线蕉| 在线综合亚洲| 亚洲精品国产精品国自产在线| 久久精品在线| 小黄鸭精品密入口导航| 亚洲免费观看视频| 亚洲国产精品成人综合| 国产一区二区无遮挡| 国产精品美女久久久久久2018 | 亚洲女人天堂成人av在线| 亚洲精品久久久久久久久| 久久一区二区三区四区| 欧美在线观看视频| 亚洲一级黄色片| 一区二区三区高清不卡| 亚洲国产一成人久久精品| 影音先锋一区| 伊人久久大香线| 国产亚洲精品aa| 国产人久久人人人人爽| 国产精品欧美久久| 国产精品激情偷乱一区二区∴| 欧美顶级少妇做爰| 欧美高清日韩| 欧美日韩亚洲国产精品| 欧美日本一道本| 欧美三级乱人伦电影| 欧美理论大片| 欧美三级第一页| 国产精品乱码一区二三区小蝌蚪 | 欧美成人精精品一区二区频| 欧美va天堂| 欧美美女喷水视频| 欧美日韩另类国产亚洲欧美一级| 欧美区高清在线| 国产精品国产三级国产a| 国产精品普通话对白| 国产日韩欧美黄色| 激情伊人五月天久久综合| 在线成人免费视频| 亚洲欧洲综合另类在线| 99视频在线精品国自产拍免费观看 | 欧美精品在欧美一区二区少妇| 欧美国产日本| 欧美视频在线视频| 国产亚洲一区二区精品| 伊人狠狠色j香婷婷综合| 91久久视频| 亚洲综合99| 久久久久久久久伊人| 欧美成人网在线| 日韩视频精品在线| 午夜视黄欧洲亚洲| 欧美1区2区视频| 国产精品精品视频| 在线国产精品一区| a4yy欧美一区二区三区| 欧美一区二区三区在线| 久久婷婷国产麻豆91天堂| 亚洲国产第一页| 午夜在线精品| 欧美福利视频网站| 国产婷婷色综合av蜜臀av| 亚洲日本中文字幕免费在线不卡| 亚洲欧美精品一区| 欧美国产精品久久| 午夜久久电影网| 欧美日韩1区| 激情丁香综合| 亚洲欧美日韩国产精品| 欧美成人按摩| 亚洲欧美怡红院| 欧美日韩国产麻豆| 狠狠色伊人亚洲综合成人| 亚洲午夜激情免费视频| 麻豆精品视频| 亚洲欧美亚洲| 欧美日韩人人澡狠狠躁视频| 精品51国产黑色丝袜高跟鞋| 亚洲影院污污.| 亚洲区一区二区三区| 久久久青草青青国产亚洲免观| 国产精品三上| 亚洲欧美日韩一区二区| 亚洲精品免费网站| 欧美风情在线观看|