zoukankan      html  css  js  c++  java
  • 线程

    代码
    #include <unistd.h>
    #include
    <pthread.h>
    #include
    <stdio.h>

    void *thr_fn1(void *arg)
    {
    printf(
    "thread 1 returning\n");
    return ((void*)1);
    }

    void *thr_fn2(void *arg)
    {
    printf(
    "thread 2 returning\n");
    return ((void *)2);
    }

    int main(void)
    {
    int err;
    pthread_t tid1,tid2;
    void *tret;

    err
    =pthread_create(&tid1,NULL,thr_fn1,NULL);
    err
    =pthread_create(&tid2,NULL,thr_fn2,NULL);
    err
    =pthread_join(tid1,&tret);
    printf(
    "thread 1 exti code %d\n",(int)tret);
    err
    =pthread_join(tid2,&tret);
    printf(
    "thread 2 exit code %d\n",(int)tret);
    return 0;
    }

    代码
    #include <unistd.h>
    #include
    <stdio.h>
    #include
    <pthread.h>
    #include
    <signal.h>
    #include
    <stdlib.h>

    int quitflag;
    sigset_t mask;
    pthread_mutex_t
    lock=PTHREAD_MUTEX_INITIALIZER;
    pthread_cond_t wait
    =PTHREAD_COND_INITIALIZER;

    void *thr_fn(void *arg)
    {
    int err,signo;
    while(1)
    {
    err
    =sigwait(&mask,&signo);
    switch(signo)
    {
    case SIGINT:
    printf(
    "\nSIGINT\n");
    break;
    case SIGQUIT:
    pthread_mutex_lock(
    &lock);
    quitflag
    =1;
    pthread_mutex_unlock(
    &lock);
    pthread_cond_signal(
    &wait);
    exit(
    0);
    default:
    printf(
    "unexpected signal %d\n",signo);
    exit(
    1);
    }
    }
    }

    int main(void)
    {
    int err;
    sigset_t oldmask;
    pthread_t tid;
    sigemptyset(
    &mask);
    sigaddset(
    &mask,SIGINT);
    sigaddset(
    &mask,SIGQUIT);
    if((err=pthread_sigmask(SIG_BLOCK,&mask,&oldmask)) != 0)
    {
    printf(
    "SIG_BLOCK error\n");
    return 1;
    }

    err
    =pthread_create(&tid,NULL,thr_fn,0);
    pthread_mutex_lock(
    &lock);
    while(quitflag==0)
    pthread_cond_wait(
    &wait,&lock);
    pthread_mutex_unlock(
    &lock);
    quitflag
    =0;
    if(sigprocmask(SIG_SETMASK,&oldmask,NULL)<0)
    {
    printf(
    "SIG_SETMASK error\n");
    }
    }

    代码
    #include <unistd.h>
    #include
    <stdio.h>
    #include
    <pthread.h>

    void cleanup(void *arg)
    {
    printf(
    "cleanup:%s\n",(char *)arg);
    }

    void *thr_fn1(void *arg)
    {
    printf(
    "thread 1 start\n");
    pthread_cleanup_push(cleanup,(
    void*)"thread 1 first handler");
    pthread_cleanup_push(cleanup,(
    void*)"thread 1 second handler");
    printf(
    "thread 1 push complete\n");
    if(arg)
    return ((void *)1);
    pthread_cleanup_pop(
    0);
    pthread_cleanup_pop(
    0);
    return ((void *)1);
    }

    void *thr_fn2(void *arg)
    {
    printf(
    "thread 2 start\n");
    pthread_cleanup_push(cleanup,(
    void*)"thread 2 first handler");
    pthread_cleanup_push(cleanup,(
    void*)"thread 2 second handler");
    printf(
    "thread 2 push complete\n");
    if(arg)
    pthread_exit((
    void*)2);
    pthread_cleanup_pop(
    0);
    pthread_cleanup_pop(
    0);
    pthread_exit((
    void *)2);
    }

    int main(void)
    {
    int err;
    pthread_t tid1,tid2;
    void *tret;

    err
    =pthread_create(&tid1,NULL,thr_fn1,(void*)1);
    err
    =pthread_create(&tid2,NULL,thr_fn2,(void*)2);
    err
    =pthread_join(tid1,&tret);
    printf(
    "thread 1 exit code %d\n",(int)tret);
    err
    =pthread_join(tid2,&tret);
    printf(
    "thread 2 exit code %d\n",(int)tret);
    return 0;
    }

    代码
    #include <unistd.h>
    #include
    <stdio.h>
    #include
    <stdlib.h>
    #include
    <pthread.h>

    pthread_mutex_t lock1
    =PTHREAD_MUTEX_INITIALIZER;
    pthread_mutex_t lock2
    =PTHREAD_MUTEX_INITIALIZER;

    void prepare(void)
    {
    printf(
    "preparing locks...\n");
    pthread_mutex_lock(
    &lock1);
    pthread_mutex_lock(
    &lock2);
    }

    void parent(void)
    {
    printf(
    "parent unlock locks...\n");
    pthread_mutex_unlock(
    &lock1);
    pthread_mutex_unlock(
    &lock2);
    }

    void child(void)
    {
    printf(
    "child unlocking locks...\n");
    pthread_mutex_unlock(
    &lock1);
    pthread_mutex_unlock(
    &lock2);
    }

    void *thr_fn(void *arg)
    {
    printf(
    "thread started...\n");
    pause();
    return 0;
    }

    int main(void)
    {
    int err;
    pid_t pid;
    pthread_t tid;

    err
    =pthread_atfork(prepare,parent,child);
    pthread_create(
    &tid,NULL,thr_fn,0);

    sleep(
    2);
    printf(
    "parent about to fork...\n");
    pid
    =fork();
    if(pid==0)
    printf(
    "child return form fork\n");
    else
    printf(
    "parent returned from fork\n");
    return 0;
    }

  • 相关阅读:
    c#数组
    微软原版SQL Helper
    CROSS APPLY和 OUTER APPLY 区别详解
    Excel 开发备忘
    ZPL打印机公用代码
    SQL SERVER 索引维护
    C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
    ZPL打印机命令解释
    在x64平台上调试依赖于x86的WCF服务
    SQL 行转列的两种做法
  • 原文地址:https://www.cnblogs.com/linyilong3/p/1865732.html
Copyright © 2011-2022 走看看