⑴ 在linux中用一个进程创建3个线程,在三个线程分别打印各自的线程id
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>
#define THREAD_NUM 3
void * thread_handler(void *arg);
void main()
{
int i;
pthread_t tid[THREAD_NUM];
for(i = 0; i < THREAD_NUM; i++){
pthread_create(&tid[i], NULL, thread_handler, NULL);
}
for(i = 0; i < THREAD_NUM; i++){
pthread_join(tid[i],NULL);
}
}
void * thread_handler(void *arg)
{
printf("process id: %d thread id: %lu ", getpid(),pthread_self());
}
⑵ linux多线程实验实现打印123的程序
写一个mai方法,包含多线程库函数头文件,里面调用pthread,照着库函数的定义,随便一大把
⑶ linux怎么通过线程id去获取线程
通过查看资料,发现一种比较简单的方法就是在代码中使用printf将当前线程的id打印出来。
而这也分成两种情况:
1. 如果是pthread,则使用,
#include <pthread.h>
pthread_t pthread_self(void);
2. 如果不是pthread,即是由内核创建的线程,则使用,
#include <sys/types.h>
pid_t gettid(void);
获取线程所在的进程的id,方法如下:
#include <sys/types.h>
⑷ linux 终端 多线程字符打印的问题
主要理解在fork函数。
你可以参考
这会产生分支,
fork会产生一个子进程。
根据fork的返回值的不同运行不同的代码。
在子进程返回值是0,而父进程就是调用这个函数的进程中返回的则是进程的ID也就是>0。
所以在子进程中执行
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf("CHILD:value=%d",value);
这个子进程会启动一个线程
void*runner(void*param){
value=5;
pthread_exit(0);
}
让value=5;
所以输出
CHILD:value=5;
而父进程则执行
wait(NULL);
printf("PARENT:value=%d",value);
由于wait()所以它会暂停父进程,等待子进程结束。
子进程结束后,然后父进程运行输出
PARENT:value=0
至于为什么是0,因为子进程和父进程的数据是在内存中各有一份的。
子进程只是改变了它那份。父进程中还是0.
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
⑸ 怎么用C语言实现两个线程在Linux环境下打印
#include<stdio.h>
#include<pthread.h>
voidthread()
{
pthread_ttid=pthread_self();
while(1)
{
printf("pthread%u ",tid);
sleep(1);
}
}
intmain(intargc,char*argv[])
{
pthread_ttid=0;
if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}
if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}
while(1)
{
printf("main ");
sleep(1);
}
return0;
}
//编译记得加-lpthread
⑹ Linux里面什么是mp线程
线程mp是非常有用的诊断java应用问题的工具,每一个java虚拟机都有及时生成显示所有线程在某一点状态的线程mp能力。虽然每个java虚拟机线程mp打印输出格式上略微有一些不同,但是线程mp的信息包含线程基本信息、线程的运行状态、标识、调用的堆栈;调用的堆栈包含完整的类名,所执行的方法,如果可能的话还有源代码的行数。
⑺ linux下,创建两个线程,一个线程要求从屏幕输入两个整数,另一个线程打印整数的和....
创建2个线程,一个为GetInput,一个为PutInputSum,功能分别为接收输入和打印整数和的功能
void GetInput(char *arg)
{
while(1)
{
//一直等待输入
if(有输出)
{
//获取信号量a
//保存2个整数值
//释放信号量b
}
}
}
void PutInputSum()
{
while(1)
{
//阻塞获取信号量b
//计算2个整数的和,并输出
//释放信号量a
}
}
兄弟,伪码基本是这样了,具体的要自己实现。只要是利用信号量实现同步。2个线程,在没有输入的情况下都是阻塞的,不消耗CPU资源
⑻ linux怎么查看线程cpu
可以用下面的命令将 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 会打印线程堆栈的情况
在 Linux 下 top 工具可以显示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc.),可以显示每个 cpu 的利用率。但是无法显示每个线程的 cpu 利用率情况,这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应。
⑼ linux多线程编程 在线程create中写数据,在print中打印,自己写的程序如下:
scanf("%s\n",&str);
把取址符去掉试试。