姓名:王央京 学号:18050100052 学院:电子工程学院
转自:>
线程创建
函数原型:intpthread_create(pthread_trestrict tidp,const pthread_attr_t restrict attr,void (start_rtn)(void),void restrict arg);
返回值:若是成功建立线程返回0,否则返回错误的编号。
形式参数:pthread_trestrict tidp要创建的线程的线程id指针;const pthread_attr_t restrict attr创建线程时的线程属性;void (start_rtn)(void)返回值是void类型的指针函数;void restrict arg start_rtn的形参。
线程挂起:该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
函数原型:intpthread_join(pthread_tthread, void value_ptr);
参数说明如下:thread等待退出线程的线程号;value_ptr退出线程的返回值。
返回值:若成功,则返回0;若失败,则返回错误号。
线程退出
函数原型:voidpthread_exit(void rval_ptr);
获取当前线程id
函数原型:pthread_tpthread_self(void);
互斥锁
创建pthread_mutex_init;销毁pthread_mutex_destroy;加锁pthread_mutex_lock;解锁pthread_mutex_unlock。
条件锁
创建pthread_cond_init;销毁pthread_cond_destroy;触发pthread_cond_signal;广播pthread_cond_broadcast;等待pthread_cond_wait。
先用ps看目前存在的所有进程的进程号,然后可以对具体进程采用以下这些 *** 作:(11345就是对应具体的进程号)
只查看该进程:ps -ef | grep 11345
查看该进程打开的文件:lsof -p 11345
查看内存分配:lcat /proc/11345/maps
查看堆栈:pstack 11345
查看发出的系统调用:strace -p 11345
查看调用库函数:ltrace -p 11345
可以用下面的命令将 cpu 占用率高的线程找出来:
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。
直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3
查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号
确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,
执行:grep SleepAVG /status | sort -k2,2 | head, 确定cpu占用较高的线程号。
使用kill -3 pid 会打印线程堆栈的情况
OpenMP的嵌套并行在默认情况下为false。
假如有第一层(外层)、第二层(内层)两层并行,默认情况下,第一层并行制导语句会创建线程组,将外层循环实现线程并行化,但第二层制导语句不会创建多个线程,而是将其所包含的代码会在外层线程组中的每一个线程里串行执行。
如外层的0号线程执行到内层并行制导语句处,在0号线程内不会再创建多个线程的线程组,而是以一个线程串行执行,即0号线程内的主线程,其线程号也为0;
同理,如外层的1号线程执行到内层并行制导语句处,在1号线程内不会再创建多个线程的线程组,而是以一个线程串行执行,即1号线程内的主线程,其线程号也为0;
你把获取线程号的库函数OMP_GET_THREAD_NUM()放在内层循环,这样默认情况下其获得的线程号永远都是0。
实现并行嵌套的方法
若要并行区域A内可以再嵌套并行区域B,需要在并行区域A外面激活并行嵌套,如下:
OMP_set_nested(1)
!$OMP PARALLEL DO
DO I=1,10
!$OMP PARALLEL DO
DO J=1,10
WRITE(,10)I,J,OMP_GET_THREAD_NUM()
10 FORMAT(1X,'I=',I2,'J=',I2,'ID=',I3)
ENDDO
!$OMP END PARALLEL DO
ENDDO
!$OMP END PARALLEL DO
以上就是关于嵌入式与Linux(五):Linux线程全部的内容,包括:嵌入式与Linux(五):Linux线程、如何在 Linux 上查找哪个线程cpu利用率最高、C语言多线程的 *** 作步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)