线程机制:

发布时间:2022-06-22 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了线程机制:脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1.程序的执行路线

2.多线程程序

3.创建和销毁线程

4.互斥锁机制保证先线程间数据的安全共享

5.条件变量同步线程间的数据传输

6.传递多个参数给线程

 

 

线程对于函数就类似进程相对于程序。后者为前者提供了允许的环境

传统的程序只有一条单独的执行路径,就算包含goto语句及其递归子程序的程序也只有一条执行路线。

创建新的线程:pthread_reate

#include<pthread.h>  ///  编译时需要链接库 -lptrhead

int ret=pthread_create (pthread_t * thread,__const pthread_attr_t * attr,void *(* func) (void *),void *arg) __THROW __nonnull ((1, 3));

  thread=指向pthread_t类型的指针

  attr=指向pthread_attr_t 类型的指针,或者为NULL

  func=指向新线程所允许函数的指针

  arg=传递参数。

  ret: 0=成功,负数=错误

  func 函数原型:void *func(void *)

 

等待线程终止:pthread_join

#include<pthread.h>  //编译时需要链接库 -lptrhead

int ret=pthread_join (pthread_t thread, void **__thread_return);

  thread=所等待的线程

  __thread_return=指向某存储线程返回值的变量

  ret:0=成功返回,错误码=错误

 

pthread_join 使得调用线程挂起直至由 thread 参数指定的线程终止 ,__thread_return 不是NULL, 线程的返回值存储在__thread_return 指向的变量中

当线程终止时,pthread_join 函数返回0, 如果由错误发生,则返回一个非零错误代码。

函数返回一个错误代码:

  某线程试图等待一个并不存在的线程;

  多个线程同时等待一个线程返回;

  线程试图等待自己;

  

进程间可以通过管道,socket, 信息, 退出。等待 以及运行环境来进行会话。

线程在进程中指向,共享全局变量。

对共享内存的访问是线程一个有用又极为危险的特性。

 

互斥锁:任何数目的线程都可以挂起等待互斥量解锁

等待互斥解锁然后再锁住互斥量

#include<pthread.h>  //编译时需要链接库 -lptrhead

int ret=pthread_mutex_lock (pthread_mutex_t *__mutex)

  __mutex=指向互斥锁对线的指针

  ret:0=成功,其余=错误

 

给互斥量解锁

#include<pthread.h>  //编译时需要链接库 -lptrhead

int pthread_mutex_unlock (pthread_mutex_t *__mutex)

  __mutex=指向互斥锁对线的指针

  ret:0=成功,其余=错误

 

采用互斥锁会导致设置和释放互斥锁太多调用导致了系统性能的降低。

可以采用传递多个参数给某一线程中的函数。

 

进程的概念非常清晰且统一,而线程却有着一系列的起源,他们的属性也各不相同。

 

进程跟线程有根本上的不同,每个进程都有其独立的数据空间,文件描述符和进程ID。

线程共享一个数据空间,文件描述符和进程ID。

1)共享数据空间:一个线程malloc,另一个线程free。会导致内存指针错误。

  线程机制会带来内存的囤积,只分配不释放存储区域,

  静态局部变量的指针的函数无法兼容于多线程环境,

2)再多线程中,可能将同一个文件描述符传递给两个不同的线程

3)fork、exec、exit、Signals

  所有的进程都共享同一个进程,如果一个线程调用了exec,系统内核用一个新的程序取代当前的程序从而所有正在运行的线程都会消失。

  一个线程调用了exit,整个进程都会结束运行。

  线程的运行导致了内存段异常或者系统错误,线程崩溃,瘫痪的是整个进程。

  某个线程调用了fork,只有调用fork 的线程再新的进程中运行,

 

挂起线程,等待某条件变量的信号pthread_cond_wait

#include<pthread.h>  //编译时需要链接库 -lptrhead

int ret=pthread_cond_wait (pthread_cond_t * cond,pthread_mutex_t * mutex)

  cond=指向某条件变量的指针

  mutex=指向互斥锁对象的指针

  ret:0=成功,其他=错误

pthread_cond_wait 总是和 互斥锁一起使用, pthread_cond_wait  先自动释放指定的锁,然后等待条件变量的变化。

  如果再调用此函数前,互斥量 mutex 并没有被锁住,函数执行的结构是不确定。

  函数返回前,此函数自动将指定的互斥量重新锁住。

唤醒一个正在等候的线程 pthread_cond_signal 

#include<pthread.h>  //编译时需要链接库 -lptrhead

int ret=pthread_cond_signal (pthread_cond_t *cond )

  cond =指向某条件变量的指针

  ret:0=成功,其他=错误

pthread_cond_signal 通过 cond 发消息,没有线程等待,无事发生;多个线程都在等待,只唤醒其中的一个。、

 

 

独立线程:不需要返回的线程:传递一个特殊的属性参数给函数 pthread_create 来创建一个独立线程。

脚本宝典总结

以上是脚本宝典为你收集整理的线程机制:全部内容,希望文章能够帮你解决线程机制:所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: