1. 消息队列
传送有格式的消息流
多进程网状交叉通信,实现大规模数据通信
使用内核中的链表(实现机制)
- posix的消息队列和系统V消息队列的区别
1、一般来说posix的接口要比systemV的简单,但是systemV的可已移植性更好几乎所有的unix系统都支持。
2、对posix消息队列的读总是返回最高优先级的最早消息,对systemV消息队列的读则可以返回
任意指定优先级的消息。
3、当往一个空队列放置一个消息时,posix消息队列允许产生一个信号或者启动一个线程,systemV消息队列则不提供类似的机制。
消息队列是随内核持续的,所以会产生的现象是:消息队列随内核开始而开始,随内核结束而结束。
2. 线程
-
什么是线程
线程是进程的一个实体,它是程序运行的最小单位。 -
为什么要学习线程(线程的作用)
1、线程是进程的一个实体,它是程序运行的最小单位,它比进程要消耗更少的资源
2、能共享地址空间(进程的地址空间)(堆栈:程序栈) -
线程由哪些组成
1、指令指针(指向当前执行的命令)
2、一个栈(函数栈)
3、寄存器的集合(状态寄存器:一部分正在运行中的处理器的状态)
4、一个私有的数据区 -
线程的特点
1、线程切换的开销很低(因为线程切换的实质是函数切换)
2、线程的通信机制简单(由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,即共享进程的地址空间) -
多线程切换的实质:函数切换
线程并不是操作系统中内核所提供的而是由线程库来提供libpthread.a/.so
线程的调用离不开ios的支持
3. 创建线程
- int pthread_create()
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
pthread_t *thread:指向线程的指针;
const pthread_attr_t *attr:创建线程时的属性,一般是NULL,即无属性创建;
void *(*start_routine) (void *):线程运行的实体函数指针;
void *arg:线程的参数;
注意:线程是进程的一个实体,一旦主进程运行结束,线程就会被回收。 - 代码如下:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
void *func(void *arg) //次线程,子线程
{
while(1)
{
printf("This is a thread\n");
sleep(2);
}
}
int main()
{
pthread_t id;
int ret = pthread_create(&id, NULL, func, NULL);
if(0 != ret)
{
perror("pthread_create error!");
exit(0);
}
while(1)
{
printf("main thread!\n");
sleep(2);
}
pause(); //pause()表示挂起子线程;或者用while(1);
return 0;
}
运行结果如下:可以看出主线程和子线程是竞争关系

- 当次线程函数的参数是int型时,代码如下
#include

本文详细介绍了Linux系统中的消息队列,包括POSIX和System V消息队列的区别,如接口复杂度、可移植性和消息读取机制。接着,解释了线程的概念、作用、组成、特点以及创建线程的步骤。通过示例代码展示了线程的创建、参数传递、线程等待、线程退出和线程状态。最后,对比了进程和线程的区别,并讨论了线程的状态转换和线程管理的相关函数。
:消息队列和线程&spm=1001.2101.3001.5002&articleId=115390652&d=1&t=3&u=6f4b281e210b49b6b267a6938e97aa68)
431

被折叠的 条评论
为什么被折叠?



