POSIX多线程入门学习笔记
来源:互联网 发布:淘宝会员店加盟费多少 编辑:程序博客网 时间:2024/06/02 05:31
一直感觉自己在做的东西,需要学习多线程编程。
今天看到http://www.kissuki.com/page/4/推荐的文章,索性进行了下学习。
POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段。
POSIX是可移植的 多线程代码。
===============================
这个是thread1.c
root@ubuntu:/home/zhangbin/code# cd thread
root@ubuntu:/home/zhangbin/code/thread# ls
thread1.c
root@ubuntu:/home/zhangbin/code/thread# vi thread1.c
root@ubuntu:/home/zhangbin/code/thread# gcc thread1.c -o thread1 -lpthread
thread1.c: In function ‘thread_function’:
thread1.c:7: warning: incompatible implicit declaration of built-in function ‘printf’
thread1.c: In function ‘main’:
thread1.c:19: warning: incompatible implicit declaration of built-in function ‘printf’
===========================
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void),
void *restrict arg);
Returns: 0 if OK, error number on failure
C99 中新增加了 restrict 修饰的指针: 由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参,或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
如果使用过 fork() 系统调用,可能熟悉父进程和子进程的概念。当用 fork() 创建另一个新进程时,新进程是子进程,原始进程是父进程。这创建了可能非常有用的层次关系,尤其是等待子进程终止时。例如,waitpid() 函数让当前进程等待所有子进程终止。waitpid() 用来在父进程中实现简单的清理过程。
而 POSIX 线程就更有意思。您可能已经注意到我一直有意避免使用“父线程”和“子线程”的说法。这是因为 POSIX 线程中不存在这种层次关系。虽然主线程可以创建一个新线程,新线程可以创建另一个新线程,POSIX 线程标准将它们视为等同的层次。所以等待子线程退出的概念在这里没有意义。POSIX 线程标准不记录任何“家族”信息。缺少家族信息有一个主要含意:如果要等待一个线程终止,就必须将线程的 tid 传递给 pthread_join()。线程库无法为您断定 tid。
======线程清理===
对大多数开发者来说这不是个好消息,因为这会使有多个线程的程序复杂化。不过不要为此担忧。POSIX 线程标准提供了有效地管理多个线程所需要的所有工具。实际上,没有父/子关系这一事实却为在程序中使用线程开辟了更创造性的方法。例如,如果有一个线程称为线程1,线程 1 创建了称为线程 2 的线程,则线程 1 自己没有必要调用 pthread_join() 来合并线程 2,程序中其它任一线程都可以做到。当编写大量使用线程的代码时,这就可能允许发生有趣的事情。例如,可以创建一个包含所有已停止线程的全局“死线程列表”,然后让一个专门的清理线程专等停止的线程加到列表中。这个清理线程调用 pthread_join() 将刚停止的线程与自己合并。现在,仅用一个线程就巧妙和有效地处理了全部清理。
报错如下:
root@ubuntu:/home/zhangbin/code/thread# gcc thread2.c -o thread2 -lpthread
thread2.c: In function ‘main’:
thread2.c:22: error: ‘thread_funciton’ undeclared (first use in this function)
thread2.c:22: error: (Each undeclared identifier is reported only once
thread2.c:22: error: for each function it appears in.)
- POSIX多线程入门学习笔记
- Posix多线程编程学习笔记
- Posix多线程编程学习笔记
- Posix多线程编程学习笔记
- Posix多线程编程学习笔记
- Posix多线程编程学习笔记
- Posix多线程编程学习笔记
- posix多线程和boost多线程学习笔记
- Posix多线程编程学习笔记整理
- Posix多线程编程学习笔记整理
- 转载:Posix多线程编程学习笔记
- Posix多线程编程学习笔记(一)
- Posix多线程编程学习笔记(一)
- Posix多线程编程学习笔记(二)
- 学习《POSIX多线程程序设计》笔记一
- POSIX 多线程程序设计完整入门学习(转载)
- Posix多线程编程学习笔记(一)—线程基础
- Posix多线程编程学习笔记(五)—条…
- 批量改文件名的bat
- android UI进阶之可延伸的图像
- Moodle VS OLAT
- 关于java泛型
- select语句执行顺序
- POSIX多线程入门学习笔记
- poj 1811解题报告
- 回车符号和换行符号产生背景
- 生活随笔:再见2010
- C++注意的小细节 (二) 不要在vector内部数据上操纵vector
- [Oracle]Windows7下安装Oracle10G
- Linux 汇编语言开发指南
- Acrobat9.0激活方法
- C#进行SOCKET开发---当连接与与服务器断开时的问题