Linux的线程通信

Linux的线程通信

一、线程概述

(1)线程与进程的区别:

1.进程运行的时候,要分配空间,用来保护它的数据段代码段还有等,而线程的空间共享的,多个线程运行的时候不会开辟新的空间,这样就效率快很多。
2.相对多进程来说,多线程是一种非常"节俭"的多任务操作方式。

(2)线程的优点:

1.省内存,启动一个线程所花费的空间远远于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远于进程间切换所需要的时间。
2.进程间通信不方便,比较耗内存,而线程是用共享内存的,数据改变直接读取共享内存就知道,当然,数据共享也会带来一些问题,但可以用条件或者锁来控制。

(3)线程间的通信方式

多线程开发的最基本概念主要包含三点:线程,互斥锁,条件。
线程操作有3种操作:线程的创建,退出,等待 。
互斥锁则包括 4 种操作,分别是创建,销毁,加锁和解锁。
条件操作有 5 种操作:创建,销毁,触发,广播和等待。

二 、线程

1. 线程创建

#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);

// 返回值:若成功返回0,否则返回错误编号

2. 线程退出

单个线程可以通过以下三种方式退出,在不终止整个进程的情况下停止它的控制流:

1)线程只是从启动例程中返回,返回值是线程的退出码。

2)线程可以被同一进程中的其他线程取消。

3)线程调用pthread_exit:

#include <pthread.h>
int pthread_exit(void *rval_ptr);

rval_ptr是一个无类型指针,与传给启动例程的单个参数类似。进程中的其他线程可以通过调用pthread_join函数访问到这个指针。

3. 线程等待

#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);

// 返回:若成功返回0,否则返回错误编号
  
代码如下:

#include<stdio.h>
#include<pthread.h>

int data = 0;

void *fucn1(void *arg)
{
   
        printf("t1: thread id is %ld\n",(unsigned long)pthread_self());
        printf("t1: param is %d\n",*(int *)arg);
        while(1)
        {
   
                printf("t1 :%d\n",data++);
                sleep(1);
        }
}

void *fucn2(void *arg)
{
   
        printf("t2: thread id is %ld\n",(unsigned long)pthread_self());
        printf("t2: param is %d\n",*(int *)arg);
        while
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值