![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 高级程序设计
五山小新新
希望每天6点下班,然后逛超市,买水果,买牛奶,看美女。
展开
-
一个建立线程时常见的问题:invalid conversion from `void*' to `void*(*)(void*)
写程序,出错误,在CSDN博客上看到了前辈写的文章。作者:futuredaemon in BUPTvoid main_thread ( void *ptr ){char *message1 = "Thread 1";char *message2 = "Thread 2";pthread_t thread3, thread4;int iret3, iret4;iret转载 2014-04-20 19:27:07 · 1839 阅读 · 1 评论 -
多进程间通信之无名管道
无名管道只能是具有亲缘关系的进程间通信(fd的继承),完成后自动消失。有名管道和普通文件类似,但其存储的信息待通信的两个进程结束后消失。无名管道intpipe(int _pipedes[2]) pipedes[0]:读管道的文件描述符pipedes[1]:写管道的文件描述符 sszie_t read(int fd,void *buf,size_t _nbytes)原创 2014-09-02 17:13:31 · 758 阅读 · 0 评论 -
多进程间通信之有名管道
有名管道 FIFO 一个进程以读方式打开,另一个以写方式打开才能正常运行只打开一端将阻塞。 无名管道是临时的,在完成通信后将自动消失,且只能在具有亲缘关系的进程间实现通信,有名管道FIFO有效地客服了这一个问题。有名管道是一个存在的特殊文件,可以在不同进程间通信,用户可以通过shell来创建有名管道(mknod 命令)。 命令管道的重用操作如下所示:...原创 2014-09-02 17:17:04 · 2389 阅读 · 0 评论 -
Linux进程间通信——使用消息队列
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。原创 2014-09-02 21:19:36 · 564 阅读 · 0 评论 -
Linux进程间通信——使用信号量
这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号原创 2014-09-02 20:59:31 · 524 阅读 · 0 评论 -
Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc原创 2014-09-02 21:12:23 · 523 阅读 · 0 评论 -
多进程间通信之信号中断处理
常见信号与处理定义:/usr/inclufe/asm/signum.h信号处理流程(kill) (sigset_t) 阻塞→待取消发送信号→系统根据信号集判断是否阻塞 ↓ (signal)非阻塞→进程→调用对应程序产生信号终端键:如Ctrl+c硬件原创 2014-09-02 20:46:52 · 1012 阅读 · 0 评论 -
Linux多线程同步对象:信号量应用
1 生产者-消费者问题 典型的生产者-消费者问题如下图所示。生产者和消费者线程共享一个由n个槽的有限缓冲区,生产者线程反复生成新的item并将其插入缓冲区尾部,消费者线程不断从缓冲区头部取出这些item并消费他们。 由于插入和取出item都涉及更新共享变量,所以必须保证对缓冲区的访问是互斥的。但仅保证互斥原创 2014-09-01 01:26:51 · 1140 阅读 · 0 评论 -
Linux进程间通信之概述
进程是一个独立的资源分配单元,不同进程间资源是独立的原创 2014-09-02 01:43:03 · 583 阅读 · 0 评论 -
Linux多线程之同步对象的比较
线程中最基本的同步元语是互斥锁。因此,在内存使用和执行时间这两个方面,互斥锁都是最高效的机制。互斥锁的基本用途是按顺序访问资源。 线程中第二高效的元语是条件变量。条件变量的基本用途是基于状态的变化进行阻塞。条件变量可提供线程等待功能。请注意,线程在基于条件变量阻塞之前必须首先获取互斥锁,在从pthread_cond_wait()返回之后必须解除锁定互斥锁。线程还必须在状态发生原创 2014-09-01 23:13:50 · 783 阅读 · 0 评论 -
Linux多线程编程:对象同步之线程信号管理
在线程中也可以使用Linux的信号机制,chic原创 2014-09-01 22:25:19 · 699 阅读 · 0 评论 -
Linux多线程编程:用同步对象编程之互斥锁使用
同步对象是内存中的变量,可以按照与访问数据完全相同的方式对其进行访问。不同进程中的线程可以通过放在由线程控制的共享内存中的同步对象互相通信。尽管不同进程中的线程通常互不可见,但这些线程仍可以互相通信。同步对象还可以放在文件中。同步对象可以比创建它的进程具有更长的生命周期。同步对象具有以下可用类型:■ 互斥锁■ 条件变量■ 读写锁■ 信号同步的作用包括以下方面:原创 2014-08-30 08:54:54 · 653 阅读 · 0 评论 -
Linux多线程编程之同步对象编程:读写锁
在对数据的读写应用中,更多的是读操作,而写操作较少,例如对数据库数据的读写原创 2014-08-31 10:42:02 · 602 阅读 · 0 评论 -
Linux多线程编程之同步对象编程:条件变量
使用条件变量可以以原子方式阻塞线程,直到某个特定条件为真为止。条件变量始终与互斥锁一起使用。使用条件变量,线程可以以原子方式阻塞,直到满足某个条件为止。对条件的测试是在互斥锁(互斥)的保护下进行的。如果条件为假,线程通常会基于条件变量阻塞,并以原子方式释放等待条件变化的互斥锁。如果另一个线程更改了条件,该线程可能会向相关的条件变量发出信号,从而使一个或多个等待的线程执行以下原创 2014-08-30 22:37:45 · 655 阅读 · 0 评论 -
Linux多线程编程之基础篇
1.多线程基础 Mutual exclusion lock(互斥锁) 用来锁定和解除锁定对共享数据访问的函数。 Condition variable(条件变量) 用来阻塞线程直到状态发生变化的函数。 Read-write lock(读写锁) 可用于对共享数据进行多次只读访问的函数,但是要修改共享数据则必须以独占方式访 问。Counting原创 2014-08-30 01:32:59 · 555 阅读 · 0 评论 -
Linux多线程编程之同步对象编程:线程信号量
在计算机版本中,信号以简单整数来表示。线程等待获得许可以便继续运行,然后发出信号,表示该线程已经通过针对信号执行P操作来继续运行。线程必须等到信号的值为正,然后才能通过将信号值减1来更改该值。完成此操作后,线程会执行V操作,即通过将信号值加1来更改该值。这些操作必须以原子方式执行,不能再将其划分成子操作,即,在这些子操作之间不能对信号执行其他操作。在P操作中,信号值在减小之前必原创 2014-08-31 11:02:16 · 628 阅读 · 0 评论 -
生产者消费者问题(多进程+共享内存+信号量)
一. 引子时隔一年再次用到 cout 的时候,哥潸然泪下,这是一种久别重逢的感动,虽然基本忘光了。趁着有大把时间,再把生产者消费者问题巩固一下,用纯C吧。珍惜能写代码的幸福时光。二. 分析生产者和消费者问题是多个相互合作的进程之间的一种抽象。生产者和消费者之间的关系:1. 对缓冲区的访问是互斥的。由于两者都会修改缓冲区,因此,一方修改缓冲区时,另一方不原创 2014-09-02 21:25:18 · 3320 阅读 · 1 评论