zoukankan      html  css  js  c++  java
  • pthread 笔记

    1.创建线程 

        res = pthread_create(&a_thread, NULL, thread_function1, NULL);
        if (res != 0)
        {
         perror("Thread creation failure");
        }

    2.等待线程结束

    pthread_join

    3.线程退出时,语句:

        pthread_exit(NULL);
        return NULL;

    4. 互斥锁 使用前必须初始化!!!

    pthread_mutex_init(&mutex, NULL);
    pthread_mutex_destroy(&mutex);



    4.
    #include <stdio.h>
    #ifdef _WIN32
    #include <windows.h>
    #include <stdio.h>
    #define sleep Sleep
    #else
    #include <unistd.h>
    #endif
    #include <stdlib.h>
    #include <string.h>
    #include <pthread.h>
    #include <semaphore.h>
    
    sem_t bin_sem;
    void *thread_function1(void *arg)
    {
        printf("thread_function1--------------sem_wait
    ");
        sem_wait(&bin_sem);
        printf("sem_wait OK
    ");
        while (1)
        {
        }
        pthread_exit(NULL);
        return NULL;
    }
    
    void *thread_function2(void *arg)
    {
        printf("thread_function2--------------sem_post
    ");
        sem_post(&bin_sem);
        printf("sem_post
    ");
        while (1)
        {
        }
        return NULL;
    }
    
    
    
    int main()
    {
        int res;
        pthread_t a_thread;
        void *thread_result;
    
        res = sem_init(&bin_sem, 0, 0);
        if (res != 0)
        {
            perror("Semaphore initialization failed");
        }
         printf("sem_init
    ");
            res = pthread_create(&a_thread, NULL, thread_function1, NULL);
        if (res != 0)
        {
         perror("Thread creation failure");
        }
        printf("thread_function1
    ");
        sleep (5);
        printf("sleep
    ");
        res = pthread_create(&a_thread, NULL, thread_function2, NULL);
        if (res != 0)
        {
             perror("Thread creation failure");
        }
        while (1)
        {
        }
    }

    5 sem:

    sem_post  每执行一次  则加1

    sem_wait( &st )   等待直到st大于1 才向下执行,  每次执行st减去1;

    6  条件锁

    #include <pthread.h>
    #include <stdio.h>
    #ifdef _WIN32
    #include <windows.h>
    #define sleep(p) Sleep(p)
    #else
    #include <ustlib.h>
    #define sleep(p) usleep((p)*1000)
    #endif
    
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*初始化互斥锁*/
    pthread_cond_t cond = PTHREAD_COND_INITIALIZER;  //初始化条件变量 
    
    void *thread1(void *);
    void *thread2(void *);
    
    int i = 1;
    int main(void)
    {
        pthread_t t_a;
        pthread_t t_b;
        pthread_create(&t_a, NULL, thread1, (void *)NULL);/*创建进程t_a*/
        pthread_create(&t_b, NULL, thread2, (void *)NULL); /*创建进程t_b*/
        pthread_join(t_b, NULL);/*等待进程t_b结束*/
        pthread_mutex_destroy(&mutex);
        pthread_cond_destroy(&cond);
        getchar();
        exit(0);
    }
    
    void *thread1(void *junk)
    {
        for (i = 1; i <= 9; i++)
        {
            pthread_mutex_lock(&mutex);//
            if (i % 3 == 0)
                pthread_cond_signal(&cond);/*条件改变,发送信号,通知t_b进程*/
            else
                printf("thead1:%d
    ", i);
            pthread_mutex_unlock(&mutex);//*解锁互斥量*/
            printf("Up Unlock Mutex
    ");
            sleep(1);
        }
        return NULL;
    
    }
    
    void *thread2(void *junk)
    {
        while (i<9)
        {
            pthread_mutex_lock(&mutex);
    
            if (i % 3 != 0)
                pthread_cond_wait(&cond, &mutex);/*等待*/
            printf("thread2:%d
    ", i);
            pthread_mutex_unlock(&mutex);
            printf("Down Ulock Mutex
    ");
    
            sleep(1);
        }
        return NULL;
    }
  • 相关阅读:
    POJ Area of Simple Polygons 扫描线
    POJ2828 Buy Tickets 线段树
    cf578c Weakness and Poorness 三分
    poj3737 UmBasketella 真正的三分
    POJ1061 青蛙的约会 exgcd
    POJ3090 Visible Lattice Points 欧拉函数
    P2860 [USACO06JAN]冗余路径Redundant Paths
    [JSOI2008]球形空间产生器
    [APIO2010]特别行动队
    [ZJOI2007]仓库建设
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/7568161.html
Copyright © 2011-2022 走看看