大多数OS中,线程是操作系统的一部分。但并非全部OS如此。
对称多处理
库安全
MT Safe(多线程安全):意味着一个函数必须对用到的共享数据加锁,它必须使用正确的errno的定义,必须只用到其他的多线程安全的函数。
线程安全的malloc()
void *malloc(int size)
{
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&m);
...
pthread_mutex_unlock(&m);
return(pointer);
}
不安全的ctime()
char *ctime(const time_t* clock)
{
static char s[SIZE];
// place the data string into s
return(s);
}
安全的ctime_t()
char * ctime(const time_t* clock, char* s, int buflen)
{
//place the data string into s
return(s);
}
read()和write()技术上讲是多线程安全的。不幸的是,它们移动了文件描述符的指针。
多个线程如果同时操作文件描述符,会有混乱出现。所以你最好自己跟踪那个指针。
因为这个原因,有一对线程安全的函数pread(), pwrite().区别是你必须自己显性指定文件指针。
这一对函数不是POSIX的一部分,但是UNIX98的标准。
多线程库调用的种类
MT safe: 一个函数可以并发地被调用
MT hot: MT安全且快的
MT unsafe
Alternative: MT不安全的,但是有替代者存在,如ctime_t
MT illegal:只可以被主线程调用的
libc中的桩函数
printf(), malloc()需要本地锁来保护里边的数据.
libpthread.so 应该在 libc.so之后被链接.
阅读(1411) | 评论(0) | 转发(0) |