线程控制

线程控制
1.线程:是系统调度的最小单位,没有自己的空间,它使用进程空间。执行:宏观并行,微观 串行。

2.Linux操作系统是允许多线程的,多线程的优点:
(1)节约时间,节约资源
(2)可以提高应用程序的响应速度;
(3)可以提高处理器效率;
(4)可以改善程序的结构

虽然线程在进程内部共享空间地址、打开的文件描述符资源等,但是线程也有其私有的数据信息,包括线程号(pthread ID)、寄存器、堆栈、信号掩码、优先级、线程私有的存储空间等。

3.线程的操作:
(1)int pthread_create(pthread_t thread,const pthread_attr_t *attr,void (*start_rtn)(*void), void *arg);
线程的创建
(2)pthread_t pthread_self();获取本线程的ID
(3)void pthread_exit(void *rval_ptr); 本线程终止,向主线程返回返回值 ==return
(4)int pthread_join(pthread_t thread, void **rval_ptr);主线程接受返回,阻塞等待子线程结束
(5)int pthread_equal(pthread_t tid1, pthread_t tid2); 判断两个线程ID是否指向同一线程
(6)int pthread_once();用来保证init_routine线程函数中仅执行一次

#inclued<stdio.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>   //pthread  成功返回0  其他失败
#include<sys/types.h>


void* haha(void* arg)  //线程的返回
{
    int i=0;
    while(1)
    {
    for(i=0;i<3;i++)
   {
    sleep(2);
    printf("   %d",(int)arg );
      }

{}
    return(void*)1000;
}

int mian()
{
    pthread_t pthid=-1,pthid2=-1,pthid3=-1;
    int renv=-1;
    rev=pthread_create (&pthid,NULL,haha,(void*)10);
}

sleep()作用1.延时2.交出系统资源,sleep(0)让其他线程进入cpu使用

4.线程同步
线程同步最大的优点就是资源的共享性,然而资源共享中的同步问题是多线程编程的难点,Linux最常用的处理方式:互斥锁、条件变量、异步信号。

互斥锁:通过锁机制来实现线程间的同步。在同一时刻它只允许一个线程执行一个关键部分的代码

(1)int pthread_mutex_trylock() 尝试锁 失败返回-1
(2)int pthread_mutex_lock () 上锁如果上锁之前是被其他线程调用,那么就阻塞直到锁被释放
如果其他线程未上锁,那锁住mutex锁住,其他线程无法使用

(3)int pthread_mutex_destroy(&mlock) 销毁
(4)int pthread_mutex_unlock() 释放锁

条件变量:利用线程间共享的全局变量进行同一种机制
(1)pthread_cond_init() 初始化条件变量
(2)pthread_cond_wait() 基于条件变量阻塞,无条件等待
(3)pthread_cond_timedwait() 阻塞直到指定事件发生,计时等待
(4)pthread_cond_signal() 解除特定线程的阻塞
(5)pthread_cond_broadcast()解除所有线程的阻塞
(6)pthread_cond_destroy() 清除条件变量

异步信号:信号与任何线程都是异步的。
(1)int pthread_kill() 向特定的线程发送信号
(2)int pthread_sigmask() 设置线程的信号屏蔽码
(3)int sigwait() 阻塞线程
举例:互斥锁

#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<stdio.h>

static char qidian[1024];

static pthread_cond_t contral;
static pthread_mutex_t conmutex;

void* wr(void *arg)
{
    pthread_mutex_lock(&conmutex);
    memset(qidian,0,1024);
    strcpy(qidian,(char*)arg);
    pthread_cond_broadcast(&contral);
    pthread_mutex_unlock(&conmutex);
 }

 void *rd(void *arg)
 {
     pthread_cond_wait(&contral,&conmutex);
     printf("neirong:%s",qidianl:);

  }
void main()
{
   pthreas_t sid=-1,rid1=-1,rid2=-1,rid3=-1;
   pthread_cond_init(&contral,NULL);    //条件初始化
   pthread_mutex_init(&conmutex,NULL);  //互斥锁初始化

   pthread_cond_destroy(&contral);
   pthread_mutex_destroy(&conmutex);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值