欢迎来到天天文库
浏览记录
ID:38841452
大小:306.81 KB
页数:9页
时间:2019-06-20
《Linux多线程编程多核编程 (2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux多线程编程IEEEPOSIX标准p1003.1c(Pthreads)定义了处理线程的一系列C语言类型的API。在Linux中,线程一般被认为是“轻量级的进程”。Linux创建进程所使用的函数是fork()或者vfork()。而对线程的创建和管理Linux可以使用POSIX的线程库pthreads提供的APIs。使用fork()创建进程和使用POSIX线程库差别:使用fork()创建进程的特点:代价昂贵,通常子进程需要拷贝父进程的整个上下文,比如数据等。进程间的通信方式比较复杂,比如使用管道、消息、共享内存等方法。操作系统在实现进程间的切换比线程切换更费时。使用POSIXpthre
2、ads库创建线程的特点:线程可使用存在于进程中的资源。线程间的通信方式更容易,比如通过进程中的变量,可以让多个线程共享数据。操作系统对线程的切换比对进程的切换更容易和快速。Linux多线程编程线程的创建pthreads线程库中提供的创建线程的函数是pthread_create()#includeintpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);线程的退出在线程的处理函数中,可以显示的调用pthread_exit()结束线程执行,也可
3、以不调用pthread_exit(),而只是让线程处理程序返回。voidpthread_exit(void*retval);除了pthread_exit()函数,可以让当前调用pthread_exit()的线程显示地退出外,线程也可以使用pthread_cancel()函数终止其他线程的执行。intpthread_cancel(pthread_tthread);等待线程结束pthread_join()函数会挂起创建线程的线程的执行,直到等待到想要等待的子线程。intpthread_join(pthread_tth,void**thread_return);线程的分离主线程创建子线程,且子线
4、程本身自己有自我回收内存资源的能力。intpthread_detach(pthread_tth);获得当前线程标志使用pthread_self()函数可以获得当前线程的标志,pthread_self()的返回值就是当前线程的标志。pthread_tpthread_self(void);线程互斥和同步——Mutex原子性。对mutex的加锁和解锁操作是原子的,一个线程进行mutex操作的过程中,其他线程不能对同一个mutex进行其他操作。单一性。拥有mutex的线程除非释放mutex,否则其他线程不能拥有此mutex。非忙等待。等待mutex的线程处于等待状态,直到要等待的mutex处于未加
5、锁状态,这时操作系统负责唤醒等待此mutex的线程。POSIX线程库对mutex提供了以下函数进行操作:intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*mutexattr);intpthread_mutex_lock(pthread_mutex_t*mutex);intpthread_mutex_unlock(pthread_mutex_t*mutex);intpthread_mutex_destroy(pthread_mutex_t*mutex);
此文档下载收益归作者所有