您的位置:首页 > 运维架构 > Linux

linux中线程的基本相关知识

2017-07-08 10:10 260 查看
在大型的工程中,使用线程并行处理数据能够明显加快运行处理速度,添加一个线程主要有以下几个步骤:

(1)、创建线程,pthread_create;

(2)、初始化互斥锁,pthread_mutex_init;

(3)、申请互斥锁,pthread_mutex_lock;

(4)、释放互斥锁,pthread_mutex_unlock;

(5)、等待线程结束,pthread_join;

(6)、线程退出,pthread_exit;

一般创建的副线程里面的参数需要从主线程中传入,参数的传递过程主要做法为:在主线程中定义一个关于副线程的结构体,里面定义各种副线程需要用到的参数以及相关的结构体,然后在主线程中将参数传入到结构体中,最后在创建线程的时候将定义的结构体一并传入到副线程中,因此相关的参数也就传递到了副线程中,一般来说,类的传递,数组的传递都需要指针传递。

线程中的互斥锁,一般是为了提供对共享资源的访问保护,即在同一时间段内,共享资源只有一个线程就可以访问。

锁的初始化主要分为静态与动态两种情况:

(1)、对于静态分配的互斥量,可以设置为PTHREAD_MUTEX_INITIALIZER,或者是pyhtead_mutex_init;

(2)、对于动态分配的互斥量,在申请内存后(malloc),通过pthread_mutex_init进行初始化,在释放内存钱(free)需要使用pthread_mutex_destroy;

返回值:成功则返回0,错误返回错误编号。

对共享资源的访问,需要对互斥量进行加锁操作,如果互斥量已经上锁,调用线程会阻塞,直到互斥量解锁,在完成了对共享资源的访问后,需啊哟对互斥量进行解锁操作。简单的来说,就是比如定义一个共享变量A,在线程1中对A进行访问之前需要对A进行加锁操作,访问结束后解锁A,在访问A的这段时间内,如果线程2也需要访问A,这时在线程2中也对A进行加锁操作,实际上线程2运行到这一部分的时候,由于线程1中A的访问并没有结束,因此线程2会被阻塞,相当于sleep一段时间,直到线程1中A的访问结束,在线程1中对A进行解锁操作,直到这一部分结束后,线程2才可以访问A,同理,线程2在访问A的时候线程1也是同样的操作。

在主线程中加上等待线程结束这一句后,主线程这句后面的程序会等到线程结束后处理,如果在副线程中加上线程退出后,程序会跳转到等待线程结束这行程序,然后继续后面的程序操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 linux