[linux basic 基础]----同步

直接使用一个共享变量,来是两个线程之间进行切换是非常笨拙而且没有效率的;信号量--互斥量--这两者是相互通过对方来实现的;比如,如果想控制某一时刻只有一个线程可以访问一些共享内存,使用互斥量要自然一些;   但是控制一组相同的对下的访问时,比如同5条可用的电话线中分配1条给某个可用的线程,那么使用计数信号量;-------------------------------------

信号量,是一个特殊类型的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作,及时一个多线程程序也是如比;   意味着如果两个(更多)的现场试图改变一个信号量的值,系统保证所有的操作都将一次进行信号量,二进制信号量只有0/1两种取值,还有一种更通用的信号量--计数信号量;信号量函数的名字以sem_开头,而不像大多数线程函数那样以pthread_开头基本信号量函数有四个:---#include<semaphore.h>int sem_init(sem_t *sem,int psthared, unsigned int value);信号量通过这个函数来创建,由sem指向的信号量对象,设置他的共享参数,给一个初始的整数值psthared,控制信号量的类型,其值为0,表示这个信号量是当前进程的局部信号量,否则该信号量可以在多个进程见共享---#include <semaphore.h>int sem_wait(sem_t *sem);wait函数将信号量的减到1,但是会等到新好两有个非零值才会开始减法操作;如果对为0的信号量调用sem_wait函数,函数会等待,知道其他线程增加了该信号量的值使其!=0;

---#include <semaphore.h>int sem_post(sem_t *sem);post函数作用是以原子操作的方式将信号量的值+1;    描述:”在单个函数中就能原子化地进行测试和设置“的能力很有价值;---sem_trywait()是sem_wait的非阻塞版本以一个信号量指针为参数,清理该信号量拥有的所有资源,如果企图清理信号量正被一个线程等待,返回一个错误---#include <semaphore.h>int sem_destroy(sem_t *sem);

==============例子;
时间: 2024-08-24 19:49:36

[linux basic 基础]----同步的相关文章

[linux basic 基础]----线程的属性

在信号量和互斥量例子中,我们都是在程序推出之前利用pthread_join对线程进行再次同步:如果想让thread想创建它的线程返回数据我需要这么做:问题:我们有时候既不需要第二个线程向main线程返回信息,也不想让main线程等待它的结束: 就是说main线程工作的时候创建了第二个thread,第二个thread线程工作到结束,不必向main线程写新的信息:================脱离线程,detaced thread 修改线程属性或调用pthread_detach方法来解决=====

[linux basic]基础--信号

线程->信号信号,是unix和linux系统响应某些条件而产生的一个事件.接收到该信号的进程会相应地采取一些行动.raise生成表示一个信号的产生catch捕获表示接受到一个信号的产生:信号是由于某些错误条件而产生,内存段冲突,浮点处理器错误或者非法指令等.它们由shell和终端处理器生成引起中断,可以作为进程见传递消息或修改行为的一种方式,明确地由一个进程发送给另一个进程.无论什么情况,它们的编程接口都是相同的,信号可以被生成,捕获,响应,忽略.signal.h====== sigabort

Linux rpm 命令参数使用详解[介绍和应用]

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的"添加/删除程序" rpm 执行安装包 二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组合: -ivh:安装显示安装进度--install--verbose--hash -Uvh:升级软件包--Update: -qpl:列出RPM软件包内的文件信息[Q

linux系统基础(一)

Linux简介与安装Unix ;windows; linux; apple(mac) linux=kernel (内核)=OSlinux全是文件==================================================IDE硬盘(支持4块):hd(a-d) [非IDE硬盘]SCSI硬盘,SATA硬盘,u盘(支持16块):sd(a-p) device 设备 (运行) hardware 硬件 /dev/hda /dev/sdc 分区:主分区(一块磁盘物理支持4个)c d e

linux系统基础优化

1.Linux系统基础优化 一.关闭SELinux功能 Selinux是什么? 安全工具,控制太严格,生产环境不用它,使用其他安全手段. 简介: SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制. Security-Enhanced Linux (SELinux)由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SELinux是一个安全体系结构,它通过LSM(Linux Security

学习linux之基础指令

2014/5/4 1.date--->显示日期的指令 date --help---->得到相关帮助,其他的指令也可这样操作 2.cal---->显示日历的指令 3.bc----->简单好用的计算器 4.sync--->数据同步写入磁盘 5.fsck--->文件系统检查指令 fsck /dev/sda7 6.chgrp-->改变所属群组 学习linux之基础指令,布布扣,bubuko.com

linux内存基础知识和相关调优方案

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大.内存作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据.只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行.对于整个操作系统来说,内存可能是最麻烦的的设备.而其性能的好坏直接影响着整个操作系统. 我们知道CPU是不能与硬盘打交道的,只有数据被载入到内存中才可

6.LINUX用户基础

6.LINUX用户基础 ·用户限制使用者或进程可以/不可以使用哪些资源,组用来方便组织管理用户: 1,每个用户拥有一个userID,操作系统实际使用的是用户ID,而非用户名, 2,每个用户属于一个主组,属于一个或多个附属组, 3,每个组拥有一个GID, 4,每个进程以一个用户身份运行,并受该用户可访问的资源限制, 5,每个可登入用户拥有一个指定的shell, ·系统中的文件都有一个所属用户及所属组, ·用户ID为32位,可以有2^32个,从0开始,为了和老系统兼容,用户ID限制在60000以下,

[Spring Data Repositories]学习笔记--为repository添加通用的方法

如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1.5.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories 1. 定义自己的repository,要从基础的repository进行继承. public interf