linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

7f35dac5cf6e1f55f7f139323d423bd4.png

(基于LINUX的操作系统实验教程)(最终版)

《基于LINUX的操作系统实验教程.doc》由会员分享,可免费在线阅读全文,更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

1、b;*WaitonthejobqueuesemahoreIfitsvalueisositive,indicatingthatthequeueisnotemty,decrementthecountbyIfthequeueisemty,blockuntilanewjobisenqueued*sem_wait(amjob_queue_count);*Lockthemutexonthejobqueue*thread_mutex_lock(amjob_queue_mutex);*Becauseofthesemahore,weknowthequeueisnotemtyGetthenextavailablejob*next_job=job_queue;*Removethisjobfromthelist*job_queue=job_queuegtnext;*Unlockthemutexonthejobqueuebecausewe’redonewiththequeuefornow*thread_mutex_unlock(amjob_queue_mutex);*Carryoutthework*rocess_job(next_job);*Cleanu*free(next_job);}returnNULL;}*Addanewjobtothefrontofthejobqueue*voidenqueue_job(*Passjobsecificdatahere*){structjob*new_job;*Allocateane。

2、else{*Getthenextavailablejob*next_job=job_queue;*Removethisjobfromthelist*job_queue=job_queuegtnext;}*Unlockthemutexonthejobqueuebecausewe’redonewiththequeuefornow*thread_mutex_unlock(amjob_queue_mutex);*Wasthequeueemty?Ifso,endthethread*if(next_job==NULL)eak;*Carryoutthework*rocess_job(next_job);*Cleanu*free(next_job);}returnNULL;}.POSIX:SEM无名信号量POSIX:SEM信号量是一个sem_t类型的变量。()声明一个信号量并对其进行初始化下面的代码声明了一个名为sem的信号量变量。includesem_tsem;必须在使用POSIX:SEM信号量之前对其进行初始化。初始化函数:intsem_init(sem_t*sem,intshared,unsignedvalue);参数shared=说明只能由初始化这个信号量的进程的线程才能使用该信号量,若shared为非,任何可以访问sem的进程都可以使用这个信号量。参数value设置信号量的初始值。()对信号量的操作sem_ost函数实现了经典的信号量signal操作。sem_wait函数实现了经典的信号量wait操作。

3、ar_rint_arms*)arameters;inti;for(i=;icount;++i)futc(gtcharacter,stderr);returnNULL;}*Themainrogram*intmain(){thread_tthread_id;thread_tthread_id;structchar_rint_armsthread_args;structchar_rint_armsthread_args;*Createanewthreadtorint,'x's*thread_argscharacter='x';thread_argscount=;thread_create(amthread_id,NULL,amchar_rint,amthread_args);*Createanewthreadtorint,o's*thread_argscharacter='o';thread_argscount=;thread_create(amthread_id,NULL,amchar_rint,amthread_args);thread_join(thread_id,NULL);thread_join(thread_id,NULL);return;}.线程实现同步与互斥.互斥GNULinux提供了互斥锁mutex来实现线程之间的互斥。要创建一个互斥锁,首先定义一个thread_mutex_t类型的变量,然后调用thread_mutex_init函数。例如:thread_mutex_tmutex;t。

4、。intsem_ost(sem_tsem);intsem_wait(sem_tsem);举例:_cincludeincludeincludestructjob{*Linkfieldforlinkedlist*structjob*next;*Otherfieldsdescribingworktobedone*};*Alinkedlistofendingjobs*structjob*job_queue;*Amutexrotectingjob_queue*thread_mutex_tjob_queue_mutex=PTHREAD_MUTEX_INITIALIZER;*Asemahorecountingthenumberofjobsinthequeue*sem_tjob_queue_count;*Performonetimeinitializationofthejobqueue*voidinitialize_job_queue(){*Thequeueisinitiallyemty*job_queue=NULL;*InitializethesemahorewhichcountsjobsinthequeueItsinitialvalueshouldbezero*sem_init(amjob_queue_count,,);}*Processqueuedjobsuntilthequeueisemty*void*thread_function(void*arg){while(){structjob*next_jo。

5、hread_mutex_init(ammutex,NULL);thread_mutex_init函数的第二个参数为mutex的属性,若为空,则使用缺省的属性。另一种建立使用缺省属性的互斥锁的方式是:thread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;加锁操作使用函数thread_mutex_lock解锁操作使用函数thread_mutex_unlock例如:_cincludeincludestructjob{*Linkfieldforlinkedlist*structjob*next;*Otherfieldsdescribingworktobedone*};*Alinkedlistofendingjobs*structjob*job_queue;*Amutexrotectingjob_queue*thread_mutex_tjob_queue_mutex=PTHREAD_MUTEX_INITIALIZER;*Processqueuedjobsuntilthequeueisemty*void*thread_function(void*arg){while(){structjob*next_job;*Lockthemutexonthejobqueue*thread_mutex_lock(amjob_queue_mutex);*Nowit’ssafetocheckifthequeueisemty*if(job_queue==NULL)next_job=NULL;。

6、eadtorint,o's*thread_argscharacter='o';thread_argscount=;thread_create(amthread_id,NULL,amchar_rint,amthread_args);return;}运行该程序,出现什么问题?分析出现的问题。例:等待线程结束上述问题的解决方法是在主线程中增加等待线程结束的函数调用thread_joinincludeintthread_join(thread_tthread,void**value_tr);该函数将调用线程挂起,直到第一个参数指定的线程退出为止。参数void**value_tr为指向目标线程的返回值的指针提供了一个位置,若为NULL,调用线程保存目标线程的返回值。程序_cincludeinclude*Parameterstorint_function*structchar_rint_arms{*Thecharactertorint*charcharacter;*Thenumberoftimestorintit*intcount;};*Printsanumberofcharacterstostderr,asgivenbyPARAMETERS,whichisaointertoastructchar_rint_arms*void*char_rint(void*arameters){*Castthecookieointertotherighttye*structchar_rint_arms*=(structch。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么玩转CSS内部样式表与外部样式表?

CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档。 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style)外部样式表 当样式需要应用于很多页面时,外部样式表将是理想的选择。…

服务器硬件监控转载:

转载:http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器,本来准备把针对服务器的硬件监控这一部分总结下成文,结果过个端午给过忘了。。。今天就又整理了下,在这里分享给51博友,也算是对自己前段工作的…

java 分析java死锁_有益的CountDownLatch和棘手的Java死锁

java 分析java死锁您是否曾经使用过java.util.concurrent.CountDownLatch ? 这是在两个或多个线程之间实现同步的非常方便的类,在该类中,一个或多个线程可以等待,直到在其他线程中执行的一组操作完成为止(请参阅javado…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码,github地址:https://github.com/bit4woo/reCAPTCHA,下载相应的jar包添加到burp中,位置在extender-extensions-add下,添加成功后burp模块栏会多出reCAPTCHA一栏,如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装,可见我的另一篇博客)开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模…

怎么样才能玩转前端所有的CSS背景相关问题?

目录 背景颜色 背景图像 背景图像 - 水平或垂直平铺 背景图像- 设置定位与不平铺 背景- 简写属性 CSS 背景属性 CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-

如何使用Eclipse调试Maven构建

当运行带有许多插件(例如jOOQ或Flyway插件 )的Maven构建时,您可能想更深入地了解这些插件或这些插件的扩展内部发生了什么。 当您从命令行运行Maven时,这可能并不明显,例如通过: C:\Users\jOOQ\workspace&…

PropertyGrid 控件使用方法

编写一个对象,后面传递给 PropertyGrid 来显示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace WindowsForms_PropertyGrid {public class UserPropertyClass{privat…

BurpSuite插件 -- Struts2-RCE

​好遗憾,明明不想失去,却又无能为力,说真的,那种想放弃又想爱的滋味,真折磨人。。。。 ---- 网易云热评 一、插件介绍 一个用于检查struts2 RCE漏洞的Burp扩展器 二、下载地址(插件作者:prakh…

c语言移位运算的作用,C语言的移位操作符使用方法

位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。以下是小编为大家搜索整理的C语言的移位操作符使用方法…

一文精通CSS文本问题,你值得一看

目录 CSS 文本格式 文本颜色 文本的对齐方式 文本修饰 文本转换 文本缩进 CSS文本属性 CSS 文本格式 下面是文本的演示

[算法导论]练习16.1-4 活动教室分配(区间着色问题)

转载请注明原创:http://www.cnblogs.com/StartoverX/p/4608412.html 题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有活动。 设计一个高效的贪心算法求每个活动应该…

c语言选择菜单程序设计,c语言课程设计报告-- 使用菜单选择趣味程序.doc

c语言课程设计报告-- 使用菜单选择趣味程序青岛农业大学课程设计报告题 目: 使用菜单选择趣味程序姓 名: 杨丽娜学 院: 理学与信息科学学院专 业: 通信工程班 级: 2班学 号:指导教师:年月日目 录…

各种服务常用端口号

常见的数据库,默认端口号是多少: 一、关系型数据库 1、MySql数据库 ,默认端口是: 3306; 2、Oracle数据库 ,默认端口号为:1521; 3、Sql Server数据库 ,默认端口号为:1433&#xff…

jboss配置ejb容器_JBoss AS 7 EJB3池配置

jboss配置ejb容器现在已经发布了AS 7.0.1,下面让我们看看有哪些新的EJB3功能可用。 就像我在上一篇文章中提到的那样 ,AS 7.0.1现在允许您为无状态会话bean和MDB配置池。 当前,我们允许在子系统级别配置池,这意味着该池将适用于服…

教你玩转CSS的所有字体,走过路过不要错过!!!

目录 CSS 字体 CSS字型 字体系列 字体样式 字体大小 设置字体大小像素 用em来设置字体大小

c语言单元二实验报告,C语言第七次实验报告

C程序设计实验报告姓名:林世龙 实验地点:学校 实验时间:2020.06.03实验项目8.31.指针基础及指针运算8.3.2.数据交换8.3.3.字符串反转及字符串连接8.3.4.数组元素奇偶排列一、实验目的与要求1、加强对学生对指针数据类型的理解,熟…

(剑指Offer)面试题4:替换空格

题目: 请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“We are happy”,则输出“We%20are%20happy”。 思路: 背景: 在网络编程中,如果URL参数中含有特殊字符,如空格,#…

Burpsuite爆破含CSRF-Token的程序

转载至https://www.se7ensec.cn/2018/10/21/Burpsuite%E7%88%86%E7%A0%B4%E5%90%ABCSRF-Token%E7%9A%84%E7%A8%8B%E5%BA%8F/ 3 年前发表 8 个月前更新 渗透测试 2 分钟读完 (大约273个字) 358次访问 Burpsuite爆破含CSRF-Token的程序 1. 抓包 0x01 开启burpsuite代理&#xff0…

Java Concurrency Essentials教程

课程大纲 并发一直是开发人员面临的挑战,编写并发程序可能非常困难。 引入并发性时,可能会发生很多事情,并且系统的复杂性会大大增加。 但是,编写健壮的并发程序的能力是开发人员的必备工具,并且可以帮助构建复杂的企…