Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1665773
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类:

2008-08-13 15:16:03

大多数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之后被链接.







阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~