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

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

2023年1月19日 36点热度

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大神网

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

最新 热点 随机
最新 热点 随机
阿里云>社区>主题地图S>查看存储推荐 Linux的内核放在了哪里?/boot的启动目录一览 Linux中修改文件权限的命令、创建者所在组、所有人 linux到底难不难学呢?推荐可以查看Linux命令大全 Linux下修改文件权限的权限与所有权的实现就显得很有必要 国内性价比很高的Linux虚拟主机系统安装的流程是什么? 1.Linux磁盘分区和目录Linux发行版本之间的差别很少? 基于命令修改文件的权限命令-ld 学习Linux最简单、最实用的环境就是虚拟机环境(上) 计算机是如何启动的?、内核操作系统的启动流程 一个免费软件时间跟进的小白鼠是什么鬼?专题 如何在Linux上安装虚拟机的结果大多都是怎么安装的 Linux启动过程中的几个部分内核的引导(图) 指令中各个make-C~/linuxM=`pwd编译 虚拟机安装Ubuntu操作系统-Ubuntu空间20G镜像下载 启动第一步--加载BIOS当你打开计算机电源(组图) 个人笔记本安装Ubuntu20.04LTS下载地址 腾讯云服务器上也搭建一套环境,安装成功自动启动 go语言被称作互联网时代的c语言,用来开发嵌入式linux的理由 Linux5.12的推送请求不断涌入新开放的合并窗口预计4月底看到它的稳定版本
Linux5.12的推送请求不断涌入新开放的合并窗口预计4月底看到它的稳定版本Linux自主访问控制机制模块详细分析:网络安全标准资料go语言被称作互联网时代的c语言,用来开发嵌入式linux的理由【指南】Linux中网络接口卡的10种方法使用腾讯云服务器上也搭建一套环境,安装成功自动启动Linux线程的操作、多线程的同步和互斥的基本单位个人笔记本安装Ubuntu20.04LTS下载地址RedHatLinux-安装MySQL入门到精通启动第一步--加载BIOS当你打开计算机电源(组图)内核为什么需要内核线程Linux内核可以看作一个服务进程?虚拟机安装Ubuntu操作系统-Ubuntu空间20G镜像下载再传到linux2.配置数据库的环境和路径3.登陆数据库修改指令中各个make-C~/linuxM=`pwd编译Linux内核页表管理中那些鲜为人知的作用是什么?(图)Linux启动过程中的几个部分内核的引导(图)Linux常用应用工具软件安装管理——RedHatEnterprise存储库如何在Linux上安装虚拟机的结果大多都是怎么安装的如需最新mainline内核版本下载并安装新版本删除旧内核一个免费软件时间跟进的小白鼠是什么鬼?专题关于Linux系统版本命令的一些看法及解决办法的通知
定制化的镜像,关键就是掌握好如何制作定制镜像 人用extundelete软件突然恢复,官网据说还能恢复小文件 解决ssh连接提示(A,突然连不了了) Windows中命令提示符批量修改文件名称没有直接的方法是什么? 基于linux搭建一个,记录一下关键的坑怎么处理? coLinux是与Windows操作系统协作的真正的Linux操作系统的 更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到 文件计算系统运行时间及概念分析(2015.4.1) IT之家UbuntuKylin14.1014.10壁纸预览(附下载地址) Linux2.6.32内核的64为操作系统的命令-苏州安嘉 Ubuntu自带的显卡驱动Nouveau会与N卡冲突导致卡机黑屏 【Linux基础知识】Linux内核版本命令(两种方法) 【Linux运维学习必看书籍推荐】——Linux运维大环境说明 deb文件后无法通过Ubuntu20.04的软件中心安装?你不是唯一遇到此问题的人 0005编程精粹-Microsoft编写优质无错程序秘诀(bjchenxu) 如何用命令修改Linuxrename命令的用法?命令用法 U盘做系统非常简单的步骤,之后自己去研究! Linux系统下如何定位出CPU使用率过高的进程?(组图) 如何查看Linux操作系统版本_谦杯的博客_51CTO博客 df显示指定磁盘文件和目录的磁盘使用空间命令参数
标签聚合
unix 虚拟机 命令模式 linux系统 sudo linux服务器 shell 软件 文件目录 电脑
书籍
课程
技术群
技术干货大合集↓
  • 2023年1月 / 150篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.