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;
    }

  • 相关阅读:
    20080408 VS2003 中 Jscript 文件中文乱码问题
    20080330 single process memory on Windows and Windows virtual memory
    20080331 Corillian's product is a Component Container Name at least 3 component containers that ship now with the Windows Server Family
    20080330 the difference between an EXE and a DLL
    20080408 Javascript中的字符串替换replaceG
    20080501 修复Windows Update 自动更新
    20080331 How many processes can listen on a single TCPIP port
    20080329 What is a Windows Service and how does its lifecycle differ from a standard EXE
    20080407 Fire in the hole
    20080328 Adobe Launches Webbased Photoshop Express
  • 原文地址:https://www.cnblogs.com/linyilong3/p/1865732.html
Copyright © 2011-2022 走看看