2 清风吹过心悠哉

尚未进行身份认证

我要认证

作为平凡的人,通过自己的努力可以做出不平凡的事情。

等级
TA的排名 16w+

volatile变量的概念及用法

一、voltaile关键字volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。二、编译器优化的概念int i = 5;int a = i;……int b = i;编译器发现两次从i读数据的代码之间,并没有对i...

2019-09-03 15:05:36

数据结构的堆栈与内存分配中的堆栈

一、数据结构的堆栈首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。...

2019-07-26 16:35:43

数据字节类型的长度与结构体字节对齐

一、数据字节类型的长度在32位机器和64机器中int类型都占用4个字节。编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面...

2019-07-26 09:50:38

六、Linux系统IO编程—fcntl 函数 和 ioctl 函数详解

一、fcntl()函数1. 函数的原型#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock * lock);函数说明:fcntl...

2019-07-24 09:19:43

五、Linux系统IO编程—dup与dup2函数

一、cat输入输出的重定向1. cat命令cat 命令用于连接文件并打印到标准输出设备上。语法格式cat [-AbeEnstTuv] [–help] [–version] fileName参数说明:-n 或 --number:由 1 开始对所有输出的行数编号。-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。-s 或 --sq...

2019-07-18 19:16:28

四、Linux系统IO编程—文件IO的内核数据结构与文件原子操作

一、缓存buff说明一般设置缓存 buff 的大小是有一定的规律的,就是根据磁盘块的大小来定。Linux下输入命令: df -k 查看磁盘 可以用命令查看下 /dev/sda1 磁盘的磁盘说明sudo tune2fs -l /dev/sda1Block size 就是磁盘块的大小,这个磁盘块的大小为 4M ,那么就可以设置缓存 buff 大小为 4096,一次就可以将数据写入。...

2019-07-17 16:33:39

三、Linux系统IO编程—系统调用文件IO

一、文件IO的概念文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。文件I/O 又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容POSIX标准的操作系统上都支持文件I/O。标准I/O被称为高级磁盘I/O,遵循...

2019-07-04 11:06:21

二、Linux系统IO编程—系统调用标准IO

一、标准IO概念标准IO在系统调用的上一层多加了一个缓冲区,也因此引入了流的概念,在UNIX/Linux下表示为FILE*(并不限于UNIX/Linux,ANSI C都有FILE的概念),FILE实际上包含了为管理流所需要的所有信息:实际I/O的文件描述符,指向流缓存的指针(标准I/O缓存,由malloc分配,又称为用户态进程空间的缓存,区别于内核所设的缓存),缓存长度,当前在缓存中的字节数,出...

2019-06-25 08:27:48

一、Linux系统IO编程——系统调用之文件IO与标准IO

一、系统调用1. 系统调用的概念Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。随Linux核心还提供了一些C语言函数库,这些库对系统调用进行了一些包装和扩展,...

2019-06-21 15:12:28

十四、Linux下线程的死锁

一、死锁的概念一般情况下,如果同一个线程先后两次调用lock,在第一次调用时,由于锁已经被占,该线程会挂起等待别的线程释放锁,然而锁正是被自己占着的,该线程又被挂起,没有机会释放锁,因此,就永远处于挂起等待状态了,这叫做死锁(Deadlock)。另种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用...

2019-06-18 15:40:29

十三、Linux下线程的信号量

信号量相关功能一、信号量的概念1.线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。但如果是普通变量,来自同一程序中不同线程的冲突操作所导致的结果将是不确定的。信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。信号量是用来调协线程对共享资源的访问的。2.最简单的信号量...

2019-06-17 15:48:31

十二、Linux下线程的同步—条件变量读者与写者问题

一、 案例写者读者案例,线程对共享资源写,写完成后读者继续读,当读取完成后,在通知写者继续写,依次循环。存在以下几种情况:1 个写者,1 个读者1 个写者,多个读者多个写者,多个读者1. 案例1——一个写者,一个读者。include<stdio.h>#include<stdlib.h>#include<string.h>#include...

2019-06-12 10:23:07

十一、Linux下线程的同步—条件变量

一、条件变量的概念1. 条件变量基本概念条件变量是线程同步的一种手段。条件变量用来自动阻塞一个线程,直到条件(predicate)满足被触发为止。通常情况下条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个或者多个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"信号。条件变量是利用...

2019-06-05 17:07:33

C语言中使用sprintf()函数

1. 函数原型#include <stdio.h>int sprintf( char *buffer, const char *format, [ argument] … );这个函数包含三个部分的参数:buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。即可选参数的想要输入的数据类型。[argument]…:可选参数,可以是任何类型...

2019-05-28 17:39:01

十、Linux下线程的读写锁

一、读写锁介绍1. 读写锁的基本概念读写锁是从互斥锁中发展下来的,读写锁将访问中的读操作和写操作区分开来对待,把对资源的共享者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。在某些读数据比改数据频繁的应用中,读写锁将会比互斥锁表现出很大的优越性。2. 读写锁的状态读写锁与互斥量类似。 但读写锁有更高的并行性,其特性为:写独占,读共享。读写锁有三种状态,读模...

2019-05-28 14:07:01

九、Linux下线程互斥锁类型及属性

一、互斥锁的创建和销毁pthread_mutexattr_t是互斥锁属性的数据类型,表示互斥锁的一些属性相关的信息。使用 pthread_mutexattr_init 可以将与互斥锁对象相关联的属性初始化为其缺省值。在执行过程中,线程系统会为每个属性对象分配存储空间。#inlcude<pthread.h>//初始化互斥锁属性pthread_mutexattr_init(pth...

2019-05-27 18:22:41

八、Linux下线程的互斥

一、线程的互斥锁为什么使用线程锁在多线程应用程序中,当多个线程共享相同的内存时,如同时访问一个变量时,需要确保每个线程看到一致的数据视图,即保证所有线程对数据的修改是一致的。如下两种情况不存在不一致的问题:每个线程使用的变量都是其他线程不会读取和修改的变量是只读的当一个线程在修改变量的值时,其他线程在读取这个变量时可能会得到一个不一致的值。一个典型的例子是,在一个多线程程序中,两...

2019-05-15 11:47:02

七、Linux下线程的同步与互斥基本概念

一、线程的同步与互斥基本概念(1) 线程的互斥多个线程之间有共享资源(shared resource)时会出现互斥现象。线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。假设有若干线程共享某个变量,而且都对变量有修改。如果它们之间不考虑相互协调工作,就会产生混乱。比如,线程A和B共用变量x,都对x执行增1操作。由...

2019-05-15 09:56:17

六、Linux下线程属性初始化、销毁、设置和获得分离属性

一、线程的属性线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。a、初始化一个线程对象的属性int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0...

2019-05-06 18:24:22

五、Linux下进程与线程的比较

一、进程与线程启动方式比较进程线程描述fork()pthread_creat()创建新的控制流return/exit()/_exit()return/pthread_exit()从现有的控制流退出wait()pthread_join()从控制流得出退出状态atexit()pthread_clean_push()/pthread_clean_p...

2019-05-05 11:48:07

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。