linux 线程备忘

三种线程同步机制

    •互斥锁

    •信号量

    •条件变量

pthread_t thread_id;

主要函数

pthread_create(),pthread_exit(),pthread_join(),pthread_cancel()

pthread_mutex_t mutex;

互斥锁主要包括下面的基本函数:

  互斥锁初始化:pthread_mutex_init()

  互斥锁上锁:pthread_mutex_lock()

  互斥锁判断上锁:pthread_mutex_trylock()

  互斥锁解锁:pthread_mutex_unlock()

  消除互斥锁:pthread_mutex_destroy()

信号量

  操作系统中所用到的PV原子操作,广泛用于进程或线程间的同步与互斥

    •本质上是一个非负的整数计数器,被用来控制对公共资源的访问

  PV原子操作:对整数计数器信号量sem的操作

    •一次P操作使sem减一,而一次V操作使sem加一

    •进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限

  –当信号量sem的值大于等于零时,该进程(或线程)具有公共资源的访问权限

  –当信号量sem的值小于零时,该进程(或线程)就将阻塞直到信号量sem的值大于等于0为止

PV操作主要用于线程间的同步和互斥

  互斥,几个线程只设置一个信号量sem

  同步,会设置多个信号量,安排不同初值来实现它们之间的顺序执行

信号量函数

  sem_init() 创建一个信号量,并初始化它

  sem_wait()和sem_trywait(): P操作,在信号量大于零时将信号量的值减一

    •区别: 若信号量小于零时,sem_wait()将会阻塞线程,sem_trywait()则会立即返回

  sem_post(): V操作,将信号量的值加一同时发出信号来唤醒等待的线程

  sem_getvalue(): 得到信号量的值

  sem_destroy(): 删除信号量

时间: 2024-07-30 10:41:45

linux 线程备忘的相关文章

[Linux]进程——备忘

1,SIGPIPE信号: 在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号.这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的.因此我们需要重载这个信号的处理方法.调用以下代码,即可安全的屏蔽SIGPIPE: TCP/IP四路挥手点击打开链接 2,prctl()函数应用 http://blog.csdn.net/zuokong/article/details/7318154比如返回当前调用该

实用收藏Linux命令备忘

系统操作 #使用shutdown命令马上重启系统[[email protected] ~]# shutdown –r now #使用shutdown命令马上关闭系统[[email protected] ~]# shutdown –h now #使用shutdown命令设置在15分钟以后自动重启系统[[email protected] ~]# shutdown –r +15 显示在线登陆用户 who 显示当前操作用户 whoami 显示主机名hostname 显示系统信息uname 动态显示当前耗

Linux命令备忘

find find [path] | grep [name] nm 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. nm [option(s)] [file(s)] 有用的options: -A 在每个符号信息的前面打印所在对象文件名称:-C 输出demangle过了的符号名称:-D 打印动态符号:-l 使用对象文件中的调试信息打印出所在源文件及行号:-n 按照地址/符号值来排序:-u 打印出那些未定义的符号:常见的符号类

一些常用Linux命令备忘

一压缩/解压文件 1.  tar.gz          解压:tar -xzvf  xxx.tar.gz  目标文件夹 压缩:tar -cvf    name.tar.gz   源文件目录 2.  tar.bz2        解压:tar -xjvf  xxx.tar.gz  目标文件夹 压缩:tar -cvf    name.tar.bz2   源文件目录 3.   tar.xz         压缩:tar Jcvf test.tar.xz glib-2.36.0 解压:tar Jxvf

Linux指令备忘

tail 常用 tail -n 50  abc.log & 后台 >定向到文件,覆盖 >>追加 tar命令  tar -zcvf test.tar.gz  /ivan_oracle/test/   (-zcvf: z用gzip压缩,c创建目标文件,v压缩过程中显示文件,f签名符:必须在最后) mount/umount挂载与卸载 netstat -apn查看端口占用情况 ifconfg 与 /sbin/ifconfig(没有权限的情况下查看)

Linux命令备忘实例(1)——终端输出

终端是用户与shell环境进行交互的窗口,所有命令的交互结果大部分都是从终端直接显示给用户,因此这部分是友好显示结果的基础. 1.命令概览 echo是基本的终端输出命令,直接将传入的参数输入,命令格式如下: echo [options] toBeOutput 详细说明如下: 2.特性与实例说明 1.换行符 默认情况下会在每次调用之后添加一个换行符.使用-n选项可以消除这个默认值. [email protected]:~$ echo test a line [email protected]:~$

linux iptables 备忘

内网机器上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT -to-source 10.0.0.1 or iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 外部到内部映射 端口映射 iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 19

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo