MENU

分类 Linux开发 下的文章

Linux多线程:线程与信号

每个线程都有自己的信号屏蔽字,新的线程会继承创建它的线程的信号屏蔽字。但是信号处理程序是所有线程共享的,也就是说一个线程注册了一个信号处理程序,其他线程就得使用这个信号处理程序。

阅读全文

Go语言Channel

“网络,并发”是Go语言的两大feature。Go语言号称“互联网的C语言”,与使用传统的C语言相比,写一个Server所使用的代码更少,也更简单。写一个Server除了网络,另外就是并发,相对python等其它语言,Go对并发支持使得它有更好的性能。

Goroutine和channel是Go在“并发”方面两个核心feature。

Channel是goroutine之间进行通信的一种方式,它与Unix中的管道类似。

阅读全文

Linux线程同步:条件变量(pthread_cond_t)

什么是条件变量

先看一下APUE第三版对于条件变量的说明:

Condition variables are another synchronization mechanism available to threads. These synchronization objects provide a place for threads to rendezvous. When used with mutexes, condition variables allow threads to wait in a race-free way for arbitrary conditions to occur.
The condition itself is protected by a mutex. A thread must first lock the mutex to change the condition state. Other threads will not notice the change until they acquire the mutex, because the mutex must be locked to be able to evaluate the condition.


阅读全文

write()函数

头文件:#include <unistd.h>

定义:

ssize_t write (int fd, const void * buf, size_t count);

说明:write()会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内. 当然, 文件读写位置也会随之移动.

返回值:如果顺利write()会返回实际写入的字节数. 当有错误发生时则返回-1, 错误代码存入errno 中.

错误代码说明
EINTR此调用被信号所中断
EAGAIN当使用不可阻断I/O 时 (O_NONBLOCK), 若无数据可读取则返回此值
EADF参数fd 非有效的文件描述词, 或该文件已关闭