『壹』 linux:在main函数中创建了两个线程,那么谁是主线程,是main函数吗,还是其他的
在主函数之前创建线程?你是说在主函数返回之前创建线程,还是说主函数执行之版前创建线程?
线程是程序最基权本的运行单位,而进程不能运行,所以能运行的,是进程中的线程。进程仅仅是一个容器,包含了线程运行中所需要的数据结构等信息。一个进程创建时,操作系统会创建一个线程,这就是主线程,而其他的从线程,却要主线程的代码来创建,也就是由程序员来创建。
一般地,线程的调度(也就是什么时候运行,什么时候暂停运行)由操作系统来负责,但你也可以显式地挂起其他的线程,或继续其他线程的运行。
对于线程,你可以把它看作是一个运行的轨迹,而多个线程,你可以看作是你的程序的不同的代码在并行地运行,而不是串行的运行(当然,实际上对于单CPU来说,多线程也是串行运行的,不过从宏观上来看,多线程是并行执行的),也就是说,你的几个线程在同时执行任务。这样一来,你就可以让不同的线程来执行不同的任务,它们之间互相不干扰,比如你可以创建一个线程用来响应界面的消息,另一个线程来做实际的工作,这样就不会由于需要计算的东东太多而导致界面失去响应,看上去跟死了一样了。
『贰』 linux 在线程中可以在创建一个线程么
gcc
xxx.c
-lpthread
其中的-l是指包来含自的lib库,具体写法可以man
gcc看下
多线程函数除了要包含
头文件
pthread.h外还必须要包含lib库pthread
pthread_create
是创建线程,但具体的线程里面做什么事是在void
*create(void
*arg)里,这个函数名是自...
『叁』 linux 编写一个多线程程序,要求主线程创建3个子线程,3个子线程在执行时都修改一个他们的共享变量。
void func1(int n)
{
printf("%d",n*10);
}
void func1(int n)
{
printf("%d",n-10);
}
void func1(int n)
{
printf("%d",n/2);
}
int main(void)
{
int n = 10;
pthread_t 1_thread,2_thread,3_thread;
pthread_create(1_thread,NULL,func1,n);
pthread_create(2_thread,NULL,func2,n);
pthread_create(3_thread,NULL,func3,n);
return 0;
}
『肆』 linux c++多线程,创建两个子线程,主线程有个循环,循环内需要从两个子线程中获取数据,然后计算结果。
线程创建的函数:pthread_create
需要用到的技术:信号量
每个线程有一个信号量控制
当需要计算是,唤醒线程,将计算结果放到一个全局变量里,工作线程休眠。然后下一次循环
『伍』 linux 线程里面创建线程吗
1、windows里的进程/线程是继承自OS/2的。在windows里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲,windows的多进程与Linux并无多大的区别,在windows里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,windows里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。2、在windows下,使用CreateThread函数创建线程,与Linux下创建进程同,windows线程不是从创建处开始运行的,而是由CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,windows的进程/线程要比Linux复杂,在Linux要实现类似windows的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在windows下就无法实现类似fork的功能了。所以现在windows下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。3、对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,windows下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。
『陆』 linux下main()中新建一个线程,延时问题
你对sleep可能有些误解,sleep本身就是使进程睡眠,睡眠的线程不会去占用CPU的。对于一个正在运行的线程来说,他最主要占用的资源就是CPU运行时间和内存。既然SLEEP使其放弃对CPU的进程权限(意思是这段时间内,他不会到CPU执行,如果想了解原因和具体实现可以参考linux内核代码对sleep的实现),那你不想让他占用资源意思就是说:不想让它占内存喽??
从定义角度来说,线程不拥有内存资源(从内核中可以查到fork和vfork创建的都是线程,他们都不会新分配内存空间,而是和父进程共享内存空间),所以说你已经没有什么可以释放了。如果还不明白,可以发信息给我。
或许你更希望做的是,压根就不启动这个线程,而是一个小时后启动。因为你没有办法然main主线程1小时后启动这个线程,因为你把握不好时间,那我可以建议你考虑下linux守护线程cron,这个可以达到你1小时后启动的目的。
『柒』 在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怎样在进程中创建线程
方法一:PS
在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进版程创建的所有线程权。
$ ps -T -p <pid>
“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。
方法二: Top
top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。
$ top -H
『玖』 linux怎么创建多线程
线程是“进程”中某个单一顺序的控制流。也被称为轻量进程。在POSIX线程中,线程体是一个函数。用pthread_create函数来启动这个线程。用pthread_join函数来等待线程结束。在linux中可以通过posix实现