LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

双核虚拟机中有中有两个线程函数执行(多CPU)

2023年1月19日 155点热度

LINUX系统编程之线程

情景:

在双核虚拟机中有两个线程函数执行以下功能:

线程一:printf("hellon");

线程二:printf("worldn");

程序运行时在单核状态下和双核状态下两个线程的执行顺序不一样,请问它们是根据怎样的规则进行调度的?

进程拥有自己的数据段,代码段,堆栈,占用资源多,开销大,通信不方便

为了减少系统开销linux 判断线程是否在运行,从进程中演化出了线程

线程存在于进程中,使用进程的资源

一、概述

线程是CPU调度和分配的基本单位,存在于进程中linux使用教程,是进程中的独立控制流

进程是系统中程序执行和资源分配的基本单位

线程自己不拥有资源

进程默认有一个控制线程(主线程)

线程依赖于进程存在,进程结束线程也结束

线程占用空间少

目的:

多任务程序设计

并发程序设计

判断线程是否正在运行_linux 判断线程是否在运行_mfc判断线程是否在运行

网络程序

数据共享

多CPU并行

二、操作

void *fun(void *arg)

注意线程函数参数和返回值类型

pthread_t pth;

创建线程pthread_create(&pth, NULL, fun, (void *)arg);(可用结构体或数组传递多个参数)

等待线程结束回收其资源pthread_join(pth, NULL);

分离线程pthread_detach(pth);

退出线程pthread_exit();

取消线程pthread_cancle();

取消状态pthread_setcancelstate();

取消类型pthread_setcanceltype();

设置取消点pthread_testcancel();

清理pthread_cleanup_push();pthread_cleanup_pop();两个函数必须成对存在

编译gcc a.c 加-lpthread

gtk编程中多个线程可能使用同一资源照成界面冻结,所以要线程互斥

可使用gtk_threads_enter();和gtk_threads_leave();实现

三、线程的同步和互斥

互斥:多个任务访问同一公共资源,同一时刻只有一个任务可以访问

互斥锁和信号量

1.互斥锁:mutex红帽linux,上锁解锁两种状态,解锁必须由上锁者完成

申请mutex,如果lock则阻塞申请者

pthread_mutex_t mutex;

pthread_mutex_lock(&mutex);

pthread_mutex_trylock(&mutex);

pthread_mutex_unlock(&mutex);

pthread_mutex_destroy(&mutex);

2.信号量

非负的整数计数器

对信号量进行减操作,如果为0则阻塞

PV原语,P减,V加

sem_t sem;

sem_init(&sem, 0, 1);

sem_wait(&sem);sem_trywait(&sem);

sem_post(&sem);

int val;

sem_getvalue(&sem, &val);

sem_destroy(&sem);

通过信号量同步操作实现多任务之间按照顺序运行

线程:无名信号量,进程:有名信号量

一个任务一个信号量

有名信号量

sem_t *sem_open("sem", O_RDWR);

sem_close(sem);

sem_unlink("sem");

有名信号量的名字在程序中和文件系统中不一样

有名信号量会保存之前的值所以使用前应该先删除再创建

实例:

有一个仓库生产者负责生产产品linux 判断线程是否在运行,并放入仓库,消费者从仓库拿走产品

要求仓

库每次只能入一人

仓库中最多存放10个产品,仓库满时不能再放入产品

判断线程是否正在运行_linux 判断线程是否在运行_mfc判断线程是否在运行

仓库空时不能再从中取出产品

生产消费速度不同

思路:

生产和消费各一个线程,仓库为互斥,假设容量为10,库存为3

假设生产速度比消费速度快

信号量的值等于剩余产品

#include

#include

#include

#include

int total=10;//总量

int last=7;//剩余量

sem_t sem_p;

sem_t sem_c;

void *produce(void *arg)

{

//sem_t *temp_semp=(sem_t *)arg;

while(1)

{

// sem_p=total-last;

if(9 >= last)

{

sleep(2);

sem_wait(&sem_p);

last++;

printf("in!last=%dn",last);

sem_post(&sem_c);

}

}

}

void *cost(void *arg)

{

//sem_t *temp_semp=(sem_t *)arg;

while(1)

{

// sem_c=last;

if(1

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux信号量 sem 信号量 线程 线程阻塞
最后更新:2023年1月19日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux内核源码/内存/文件系统/进程管理/设备 TeXLive和MiKTeX两大主要发行版的镜像配置方法 安全增强式Linux(SELinuxLinux)内核修改和用户空间工具 Ubuntu系统下安装字体和切换默认字体的方法系统 896MB如何转换为物理空间(Linux地址映射的分析) 比较流行的Linux系统图形界面环境-Linux社区创作挑战赛 如何查看Linux硬盘的大小、类型和硬件信息?方法 Linux内核中的虚拟服务器集合:ipvsadm命令 FreeBSD9.0正式版FreeBSD8.0支持amd-64、i386编译器 如何在Ubuntu中创建应用的快捷方式? 如何在linux上安装搜狗输入法进行解释,别忘了关注本站 用集群技术构建网络服务器的发展趋势提出了 搜狗输入法forlinux版本安装指南: Linux中常用的4种虚拟化方法以及它们相应的优缺点 如何在linux下安装搜狗输入法后怎么用的那些神秘传说? Linux虚拟服务器LVS自动化运维方法及运维系统介绍 时间戳和时区1Unix(/)接收的两个推测 安装Linux和Windows双系统的硬盘分区是什么意思? linux怎么安装输入法Linux系统可以通过以下步骤步骤安装 (Unix)Unix时间戳转换公式及Unix操作成时间公式
快速实例学习:修改某个目录下的所有文件的权限bin是什么格式的文件怎么打开bin文件打开方法?科林·沃森:Ubuntu默认是关闭root帐户的,这样做(知识点)chmod系统控制用户对文件权限的命令如何在UbuntuLinux中启用和禁用root用户登录系统?Linux系统chmod命令使用数字修改文件权限的方式有哪些?关于Ubuntu修改密码及密码复杂度策略设置的文章!Ubuntu本地提权漏洞CVE-2017-16995程序员不输入密码进入Linux系统,孩子们永远不知道下一个bugchmod系统变更文件或目录的权限变更的详细资料介绍Linux常用服务器构建-ftp和scp介绍云海天教程:Ubuntu修改密码及密码复杂度策略设置Linux内核更新包配置Ubuntu环境配置环境Android官方网站:OpenHandsetAlliance源码模式:开发源码内核linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介Fedora17新特色特色说明桌面环境28bata集成了GNOMELinux嵌入式系统智能手机系统的硬件设计Unix或者类Unix文件系统中的每个文件(或者目录)打开U盘什么文件都看不到小编总结了基于嵌入式Linux的智能手机系统软件的设计与实现
如何在UbuntuLinux中启用和禁用root用户登录系统? 不同服务器启动不同端口一样修改教程 Linux添加普通用户到sudo列表的解决方法介绍 下对目录操作的相关权限问题及解决办法 2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer Android插件化框架DL代理Activity的原理和三个关键问题 最常用、最受欢迎的Linux发行版来学习黑客和渗透测试 Linux账号密码过期导致无法登录CentOS7模式重置root用户密码 Linux发行版本号与Linux内核版本是互相独立的吗? 增加新的分区oempty命令来进行时| home/ftproot/scb添加权限,你的第一个要求是什么? Ubuntu本地提权漏洞CVE-2017-16995 Windows环境中远程连接Linux服务器_轻量 关机/重启命令有shutdown、halt、reboot、及init LinuxDNS服务器,如何安装、配置和维护它? Linux常用的命令大全-系统管理进程与作业管理命令解释大全 瑞星ESM防病毒终端安全防护系统查杀Sfile勒索软件 安装Linux系统都是初学者的噩梦,安装失败也无所谓 驱动模板修改MX25L1606E与m25pxxSPIFLASH存在的区别:修改m25pxx.c文件 国内性价比很高的Linux虚拟主机系统安装的流程是什么?
标签聚合
文件目录 软件 linux服务器 电脑 命令 linux脚本 linux系统 sudo 虚拟机 命令模式
书籍
课程
技术群
技术干货大合集↓
  • 2023年6月 / 4篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.