首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux C 多线程编纂-例子:10个售票窗口协作卖掉150张票

2013-09-24 
Linux C 多线程编写-----例子:10个售票窗口协作卖掉150张票这个是比较简单的例子,有助于初学多线程的人理

Linux C 多线程编写-----例子:10个售票窗口协作卖掉150张票

这个是比较简单的例子,有助于初学多线程的人理解多线程的工作模式,后期会不断的跟进多线程的进阶应用等。

储备知识:

1.多线程是一种多任务并发的工作方式,在linux中线程包括内核线程和用户线程,内核线程有内核管理,不需要我们做更多的工作,我们这里将的是用户线程,线程统一由用户线程来切换。

2.线程相关函数:

int pthread_create(pthread_t id,pthread_attr_t *attr, void *(*start_runtine)(void *), void *arg);//线程创建函数

获取线程ID(即上面创建的pthread_t id):pthread_t pthread_self();

退出线程:void pthread_exit(void *retval);

挂起线程:int pthread_join(pthread_t id,void **return);

线程同步:在POSIX中提供线程同步的方式有两种,条件变量和互斥锁

互斥锁:

pthread_mutex_t *mutex;//互斥锁变量

int pthread_mutex_init(pthread_mutex_t *mutex, pthread_attr_t *attr);//初始化一个互斥锁

int pthread_mutex_lock(pthread_mutex_t *mutex);//锁定互斥锁,这样子当一个线程锁定的话,另一个线程就会处于等待状态

int pthread_mutex_unlock(pthread_mutex_t  *mutex);//解锁互斥锁,如果解锁后,处于等待状态的线程就有机会访问临界区

条件变量:其实是对互斥锁的一种补充,因为线程可以在等待条件变量的时候同时解锁,这在生产者和消费者模式可以体现。

pthread_cond_t cond;

int pthread_cond_init(pthread_cond_t *cond, const pthread_cond_addr *attr);//初始化一个条件变量,后面参数attr是条件变量的属性

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);//释放互斥量mutex,等待条件变量cond

int pthread_cond_timewait(pthread_cond_t *cond, pthread_mutex_t *mutex,const struct timespec *abstime);//释放互斥量mutex,等待条件变量cond,与pthread_cond_wait函数不一样的是,该函数可以是线程在abstime时间内不阻塞。

int pthread_cond_signal(pthread_cond_t *cond);//释放条件变量

int pthread_cond_broadcast(pthread_cond_t *cond);//释放所有由cond阻塞的线程,这里要小心使用

3.线程属性,这些属性在使用前,必须调用相关的初始化函数pthread_xxx_init(xxx *);

线程属性:pthread_attr_t 

Create thread 1 success!Create thread 2 success!Create thread 3 success!Create thread 4 success!Create thread 5 success!Create thread 6 success!Create thread 7 success!Create thread 8 success!Create thread 9 success!agent 3 sell a ticket!agent 4 sell a ticket!agent 5 sell a ticket!agent 6 sell a ticket!agent 7 sell a ticket!
。。。。。这里没有全部打出贴上,抱歉,篇幅太多

根据以上线程的介绍,用多线程实现的例子有:生产者和消费者等


    



热点排行