zoukankan      html  css  js  c++  java
  • 14 多线程编程

    这里所指的线程是POSIX线程(简称pthread)

    线程同步方式:POSIX信号量、互斥锁、条件变量

    根据运行环境和调度者身份,线程可分为内核线程和用户线程

    创建线程和结束线程

     1 #include <pthread.h>
     2 int pthread_create(pthread_t* thread, const pthread_attr_* attr, void* (*start_routine)(void*), void* arg);    //创建线程
     3 int pthread_exit(void* retval);    //退出线程
     4 
     5 //一个进程中的所有线程都可以调用pthread_join函数来回收其他线程,即等待其他线程结束
     6 int pthread_join(pthread_t thread, void** retval);    
     7 
     8 
     9 //有时候我们希望异常终止一个线程,即取消线程
    10 int pthread_cancel(pthread_t thread);
    11 
    12 //目标线程可以决定是否允许被取消以及如何取消,这分别由如下两个函数完成:
    13 int pthread_setcancelstate(int state, int* oldstate);
    14 int pthread_setcanceltype(int type, int* oldtype);

    线程属性

    pthread_attr_t 结构体定义了一套完整的线程属性

    #include <bits/pthreadtypes.h>
    #define __SIZEOF_PTHREAD_ATTR_T 36
    typedef union{
        char __size[__SIZEOF_PTHREAD_ATTR_T];
        long int __align;
    }pthread_attr_t;

    POSIX信号量

    互斥锁

    #include <pthread.h>
    int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* mutexattr);
    int pthread_mutex_destroy(pthread_mutex_t* mutex);
    int pthread_mutex_lock(pthread_mutex_t* mutex);
    int pthread_mutex_trylock(pthread_mutex_t* mutex);
    int pthread_mutex_unlock(pthread_mutex_t* mutex);

    条件变量

    线程间同步共享数据的值,条件变量提供了一种线程间的通知机制:当某个共享数据达到某个值的时候,唤醒等待这个共享数据的线程

    1 int pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t* cond_attr);
    2 int pthread_cond_destroy(pthread_cond_t* cond);
    3 int pthread_cond_broadcast(pthread_cond_t* cond);
    4 int pthread_cond_signal(pthread_cond_t* cond);
    5 int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);

    多线程环境

    可重入函数:如果一个函数能被多个线程同时调用且不发生竞态条件,则我们称它是线程安全的,或说它是可重入函数。linux库函数只有一小部分是不可重入的。这些库函数之所以不可重入,主要是因为其内部使用了静态变量。不可重入库函数的可重入版本是在原函数名尾部加上 _r。

  • 相关阅读:
    跨媒体安全
    kali视频(21-25)学习
    kali视频(26-30)学习
    kali视频(16-20)学习
    kali视频学习(11-15)
    kali视频(1-5)
    使用Metaspoit攻击MS08-067
    web应用程序安全攻防---sql注入和xss跨站脚本攻击
    -区块链-
    TCP/IP网络协议攻击
  • 原文地址:https://www.cnblogs.com/raichen/p/5039182.html
Copyright © 2011-2022 走看看