`
vearne
  • 浏览: 18846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux线程同步--条件变量练习(2)

 
阅读更多

 注意:消息是由主线程产生的,而消息这时候在堆中,两个线程通过全局变量获取访问消息。

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

struct msg {
	int data;
	struct msg *m_next;
	/* ... more stuff here ... */
};

struct msg *workq;
pthread_cond_t qready = PTHREAD_COND_INITIALIZER;
pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER;

	void
process_msg(void)
{
	struct msg *mp;

	for (;;) {
		pthread_mutex_lock(&qlock);
		while (workq == NULL)
			pthread_cond_wait(&qready, &qlock);
		mp = workq;
		workq = mp->m_next;
		pthread_mutex_unlock(&qlock);
		/* now process the message mp */
		printf("deal the mp. the data is %d\n",mp->data);
		free(mp);
	}
}

void
enqueue_msg(struct msg *mp)
{
	pthread_mutex_lock(&qlock);
	mp->m_next = workq;
	workq = mp;
	pthread_mutex_unlock(&qlock);
	pthread_cond_signal(&qready);
}
void* thr_fn(void* arg){
	process_msg();
	return ((void*)1);
}
int main(){
	pthread_t tid1;
	pthread_t tid2;
	int err;
	err = pthread_create(&tid1,NULL,thr_fn,NULL);
	if(err !=0){

		err_quit("can't  create thread%s\n",strerror(err));
	}
	
	err = pthread_create(&tid2,NULL,thr_fn,NULL);
	if(err !=0){
		err_quit("cant' create thread%s\n",strerror(err));
	}
	printf("create success.\n");
	struct msg* mp = malloc(sizeof(struct msg));
	mp->m_next = NULL;
	mp->data = 110;
	enqueue_msg(mp);
	//sleep(5);	
	sleep(1);
	pthread_cancel(tid1);
	pthread_cancel(tid2);
	//pthread_cancel(tid1);
	//pthread_cancel(tid2);		
	printf("ok\n");
}

 

 

 

分享到:
评论

相关推荐

    进程与线程--小练习

    在"进程与线程--小练习"这个主题中,可能包含了一些实践性的例子,比如创建和管理进程、线程的示例,或者展示了如何使用操作系统提供的API来实现进程间通信和线程同步。这些练习可以帮助学习者更好地理解和掌握进程...

    Linux系统编程之线程同步

    线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。 举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000 举例2...

    linux编程技术-多线程-网络编程

    学习如何创建、同步和管理线程,理解锁、信号量、条件变量等同步机制,以及如何避免死锁和资源竞争,是多线程编程的关键。多线程在数据库、Web服务器、科学计算等领域有广泛应用。 Linux窗口编程则主要指图形用户...

    linux编程基础-线程的练习-实验四.docx

    3. **线程同步**:为了避免多个线程同时访问共享资源导致的数据不一致问题,需要使用互斥锁(`pthread_mutex_t`)或条件变量(`pthread_cond_t`)等同步机制。本实验中主要关注线程间的等待,可以使用`pthread_join()`...

    linux之线程同步的概要介绍与分析

    学习Linux线程同步,推荐查阅以下资源: - **书籍**:《Advanced Programming in the UNIX Environment》(APUE)一书的相关章节。 - **文档**:Linux man pages 中关于`pthread`系列函数的详细说明。 - **实践项目*...

    实验二:Linux多线程创建.docx 完整实验报告(附代码)

    2. **Linux中的线程API**: 在Linux中,我们通常使用POSIX线程(pthread)库来创建和管理线程。关键函数包括: - `pthread_create()`:用于创建新的线程。 - `pthread_join()`:等待指定线程结束并回收资源。 - ...

    Linux 多线程介绍

    在Linux中,线程的操作涉及到一系列函数,如`pthread_create`用于创建线程,`pthread_join`用于等待线程结束,`pthread_mutex_lock`和`pthread_mutex_unlock`用于线程互斥,以及`pthread_cond_wait`和`pthread_cond_...

    Linux 多线程实现生产者消费者模式.pdf

    总结来说,Linux多线程实现生产者消费者模式涵盖了多线程创建、线程同步与互斥、锁机制、条件变量以及线程屏障等核心知识点。这些知识点是Linux下进行高级多线程编程不可或缺的部分,对于理解现代操作系统中多任务...

    Linux-C-Program.zip_linux 编程

    6. **进程与线程**:介绍Linux下的进程和线程概念,包括进程创建、线程同步和通信机制,如互斥锁、信号量、条件变量等。 7. **内存管理**:C语言中的动态内存分配(malloc, free)和内存管理策略,以及如何避免内存...

    linux 进程线程小程序

    在Linux操作系统中,进程和线程是两个核心概念,它们是程序执行的载体。本教程“linux 进程线程小程序”将深入探讨这两个概念,以及如何利用信号量、管道和共享内存进行进程间的通信。 首先,让我们了解什么是进程...

    socket linux c++ 多线程3

    然而,多线程也带来了同步问题,如竞态条件和死锁,需要使用互斥量(`std::mutex`)、条件变量(`std::condition_variable`)等同步机制来避免。 标签中的"linux"意味着我们需要考虑Linux的特定特性,例如信号...

    实验5--Linux-高级程序设计.doc

    通过这个实验,你将深入理解Linux环境下的程序开发流程,熟悉gcc/g++工具链,掌握多线程编程,尤其是线程同步和互斥的实现,这些都是Linux高级程序设计的关键知识点。此外,实验还会增强你对调试工具的使用,这对于...

    POSIX Threads Programming

    - 条件变量是另一种同步原语,常与互斥锁配合使用,用于实现线程间的等待与通知机制。 - 条件变量允许线程在满足某些条件前暂停执行,直到另一个线程发出信号。 - **创建与销毁条件变量** - `pthread_cond_init...

    linux网络编程-源代码&课件.zip

    线程间的同步和互斥问题也是学习的重点,如使用`pthread`库中的`mutex`和`condition_variable`来确保数据一致性。 错误处理是任何网络编程中不可或缺的一部分。在Linux环境中,错误通常通过返回值和`errno`全局变量...

    操作系统多线程实验(只有代码)

    - **线程同步**:为了防止多个线程对共享资源的不正确访问,需要使用同步机制,如互斥锁、信号量、条件变量等。 - **线程调度**:操作系统负责线程的调度,根据不同的调度策略(如抢占式、非抢占式),决定哪个...

    Linux从入门到精通学习文档

    ### Linux从入门到精通学习文档知识点汇总 #### 一、Linux入门篇 ##### 1.1 Linux操作系统简介 - **定义**: Linux是一种免费且可自由传播的类Unix操作系统,其设计灵感源自POSIX和UNIX标准。 - **特点**: - 多...

    POSIX多线程程序设计(中文)pdf

    条件变量则允许线程等待特定条件满足后再继续执行。 线程属性(`pthread_attr_t`)可以用来定制新创建的线程的属性,如优先级、调度策略、栈大小等。通过设置合适的属性,开发者可以优化线程的行为,适应不同的系统...

    linux程序设计经典最新版--《linux程序设计(第四版)英文原版》

    另外,书中还会讨论线程编程,包括创建和管理线程,线程同步(互斥锁、条件变量等)以及线程安全问题。线程是提高多核处理器上程序并行性能的有效手段,理解线程编程能帮助开发者优化程序性能。 最后,为了帮助读者...

    基于韦东山的嵌入式Linux应用开发基础知识视频教程,我所练习而写的代码

    6. **test5.5 pthread cond_mutex**:这是更高级的线程同步机制,结合了条件变量和互斥锁,用于在满足特定条件时唤醒等待的线程。 7. **test6 TCP_pipe_signal**:这个可能是关于进程间通信(IPC)的,`pipe`是简单...

Global site tag (gtag.js) - Google Analytics