`
网络接口
  • 浏览: 44729 次
文章分类
社区版块
存档分类
最新评论

linux线程间通信示例

 
阅读更多
#include 
#include 
#include 
int buf[1000000]; 
int w=0,r=0; //r是读指针,w是写指针 
int size=10; //缓冲区大小 
pthread_mutex_t lock; //锁 
pthread_cond_t is_empty; //缓冲区是否为空 
pthread_cond_t is_full;  //缓冲区是否已满 
void *sender(void *a)     //发送100个数据 

    int i,j,k; 
    for(i=1;i<=100;i++)   //总共100个数据 
    { 
        pthread_mutex_lock(&lock);  //锁 
        if(w-r>size)     //缓冲区是否已满 
        pthread_cond_wait(&is_full,&lock);  //满了,等待接受线程把数据取走 
        buf[w++]=i;  //缓冲区有空间,发送 
        printf("%d--->/n",i); //打印出来 
        pthread_cond_signal(&is_empty);  //缓冲区里至少有一个数据,读线程可以把他取走 
        pthread_mutex_unlock(&lock);    //解锁 
    } 
    return ; 

void *receiver(void *a)    //接受数据 

    int x; 
    while(1) 
    { 
        pthread_mutex_lock(&lock);  //锁 
        if(r==w)     //缓冲区是否有数据 
        pthread_cond_wait(&is_empty,&lock);  //没有数据,等待发送线程发数据 
        x=buf[r++];   //有数据了,取走 
        if(x!=0) 
        printf("--->%d/n",x);  //打印出来 
        else 
        break;    //数据发送->接受完了,结束线程 
        pthread_cond_signal(&is_full);  //缓冲区至少还有一个空间可以让发送进程发送数据 
        pthread_mutex_unlock(&lock);     //解锁 
    } 
    return ; 

int main() 

    memset(buf,0,sizeof(buf)); 
    pthread_t a,b; //创建两个线程 
    //初始化 
    pthread_mutex_init(&lock,NULL); 
    pthread_cond_init(&is_full,NULL); 
    pthread_cond_init(&is_empty,NULL); 
    //线程开始工作 
    pthread_create(&a,NULL,sender,0); 
    pthread_create(&b,NULL,receiver,0); 
    void *recycle;  //线程结束时,存放回收的数据 
    pthread_join(a,&recycle); //回收资源 
    pthread_join(b,&recycle);  //回收资源 
    return 0; 
分享到:
评论

相关推荐

    Linux下多线程间通信

    在Linux环境下,多线程间通信是实现并发执行任务并协调数据访问的关键技术。线程间的通信主要通过共享内存和同步机制来实现,因为线程天然具有共享数据结构的能力,这意味着全局变量可以在多个线程之间共享。然而,...

    linux多线程设计及示例

    `pthread_self`函数返回当前线程的ID,这对于线程间识别和同步操作非常有用。 4. **线程分离** `pthread_detach`函数将一个线程设置为脱离状态。脱离线程在结束时会自动清理资源,无需其他线程调用`pthread_join`...

    linux 进程间通信

    本示例“Linux 进程间通信”着重演示了System V IPC机制,包括信号量(Semaphore, sem)、共享内存(Shared Memory, shm)和管道(FIFO)三种方式。这些技术广泛应用于构建复杂、高效的系统和服务,尤其是在需要不同...

    linux上实现多进程和多线程实现同步互斥(源代码)

    多进程是指在一个操作系统中同时运行多个独立的程序实体,每个进程都有自己的内存空间,资源独立,进程间通信(IPC)通常通过管道、信号量、共享内存等方式进行。在Linux下,可以使用`fork()`系统调用来创建新进程,...

    linux thread线程创建示例代码

    在Linux操作系统中,线程是进程内的执行单元,它们共享同一地址空间,使得多任务...在实际应用中,你可能需要传递参数、同步线程或者管理线程间的通信。通过理解和运用这些基本概念,你可以构建更复杂的多线程程序。

    linux线程的挂起与恢复

    条件变量`pthread_cond_t`则用于线程间的通信,允许一个线程等待另一个线程满足特定条件后再继续执行。 5. **线程安全** 在多线程环境中,正确使用同步原语(如互斥锁和条件变量)是非常重要的。在上述示例中,...

    嵌入式Linux中的进程/线程间通信机制研究

    最后,信号是轻量级的进程间通信方式,常用于通知事件的发生。例如,进程可以通过发送SIGINT信号来请求另一进程停止运行。`raise()`, `signal()`, 和 `sigaction()`等函数是处理信号的核心接口。信号通信快速但数据...

    linux_code.rar_linux 多线程_linux 线程_多线程编程

    - **线程间的通信可以通过共享内存、管道、消息队列、套接字等方式实现。** 6. **线程调度策略**: Linux提供多种线程调度策略,如SCHED_OTHER(默认,轮转),SCHED_FIFO(先入先出,实时),SCHED_RR(时间片...

    c++代码如何实现在win/linux下跨线程间事务触发实现完整示例代码

    5. **示例代码分析**:`event_test`文件很可能是包含一个或多个示例,演示了如何在Windows和Linux上创建线程事件,以及如何使用这些事件进行线程间的通信。代码可能包括创建事件对象,设置/重置事件状态,以及在适当...

    QT5线程QThread使用示例

    总结一下,QT5中的`QThread`提供了便捷的线程管理和通信机制,通过信号与槽实现了线程间的同步,避免了直接的线程间交互,简化了并发编程的复杂性。这个示例为理解和实践QT5线程编程提供了一个基础的起点,实际项目...

    linux进程间通信同步与互斥

    测试环境:64位ubuntu 13LTS 功能说明:使用互斥锁+条件变量+共享内存的方式实现进程(或线程)间的通信示例

    线程示例代码

    线程间通信可以通过共享内存、信号量、条件变量等机制来实现。例如,使用`pthread_mutex_t`类型定义互斥锁,可以确保在任何时候只有一个线程访问特定资源,避免竞态条件: ```c pthread_mutex_t mutex; void* ...

    内存共享进程间通信示例

    在这个"内存共享_进程间通信示例"压缩包中,很可能包含了实现这些步骤的C语言或其他编程语言的示例代码。这些代码可能展示了如何创建共享内存、映射到进程、进行数据交换以及如何进行同步操作的过程。通过学习这些...

    ZYNQ双核AMP官方例程(双核分别跑Linux+裸机实现核间通信)

    在本文中,我们将深入探讨基于Xilinx ZYNQ平台的双核异构处理系统(Heterogeneous Processing System, HPS)实现的AMP(Asymmetric Multi-Processing)模式下的Linux与裸机程序之间的核间通信。Xilinx ZYNQ是集成ARM...

    Linux下的多线程编程.pdf

    线程间通信比进程间通信更加方便快捷,因为线程共享进程数据空间,数据可以直接在它们之间传递。这减少了通信的时间和复杂性。然而,数据共享也带来了需要特别注意的问题,例如某些变量不能同时被两个线程修改,以及...

    linux 线程 pdf

    - **通信机制**:线程间的通信更为简单直接,无需通过复杂的进程间通信(IPC)机制。 3. **多线程的优势** - **高效性**:多线程能够充分利用多核处理器的能力,提高程序执行效率。 - **结构清晰**:将复杂任务...

    linux线程介绍及应运

    线程间的通信也更为便捷。同一进程内的线程可以直接访问共享数据,无需通过复杂的通信机制,但这也带来了数据同步的问题,需要妥善处理临界区和共享资源的访问控制。 多线程的应用场景广泛,包括: 1) 提高应用...

    Linux应用程序之线程通信

    本文将深入探讨线程的基础知识,特别是线程通信的概念,以及如何在Linux环境下使用原子操作和自旋锁来确保线程间的正确同步。 首先,线程是操作系统分配CPU时间的基本单位,一个进程可以包含多个线程,它们共享同一...

Global site tag (gtag.js) - Google Analytics