首页 > 代码库 > 1个争用资源的简单线程小例子
1个争用资源的简单线程小例子
main()本身就是一线程,现在在main内部再创建另一个线程,
例子只是简单的在两个线程中打印了一下TID和PID以及获取本身PID,当然两个线程的TID是一样的,PID是不一样的。
这里主要说的是:两个线程一起运行,屏幕上显示的各线程的内容,因为一起争用资源,造成了打印信息内容的重叠。
代码:
#include <iostream>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <pthread.h>using namespace std;void *thread_func(void *arg);pthread_t tid;void *thread_func(void *arg){ cout<<"NewThread : PID="<<getpid()<<", TID="<<tid<<", pthread_self()="<<pthread_self()<<endl; pthread_exit(NULL); //退出线程(actived)}int main(){ //pthread_t tid; if (pthread_create(&tid, NULL, thread_func, NULL) != 0) { cout<<"Create thread error\n"; exit(1); } cout<<"MainThread: PID="<<getpid()<<", TID="<<tid<<", pthread_self()="<<pthread_self()<<endl; sleep(2); return 0;}
输出结果:
[root@localhost thread]# ./a.out
MainThread: PID=NewThread : PID=5597155971, TID=, TID=139748750608128, pthread_self()=139748750608128139748750616352, pthread_self()=139748750608128
[root@localhost thread]# ./a.out
MainThread: PID=56049, TID=140537922148096, pthread_self()=140537922156320NewThread : PID=56049, TID=
140537922148096, pthread_self()=140537922148096
[root@localhost thread]# ./a.out
MainThread: PID=56053, TID=140158878066432, pthread_self()=140158878074656
NewThread : PID=56053, TID=140158878066432, pthread_self()=140158878066432
结论:
在多线程中使用同一资源时,如果线程的执行过程不是原子操作,那么它在执行过程中随时会被其它线程中断,然后等到其再拥有资源权限时,再继续执行剩下的操作。
1个争用资源的简单线程小例子