c语言怎么创建线程和使用

c语言怎么创建线程和使用~

用 pthread_t创建线程名字。然后pthread_create开辟线程。
具体使用。
比如有一个函数
void *hello()
{
printf("create pthread!
");

}
,然后在main函数里面调用,
int main()
{
pthread_t a_thread;
pthread_create(&a_thread, NULL, (void *)hello, NULL);
}

这样就完成了hello()函数的创建和使用,接下来hello函数就会在一个线程中运行

进程的生命周期:[1].创建 --- fork [2].执行 --- a. execb.子进程实现代码逻辑[3].结束 --- exit _exit僵尸态进程---wait waitpid孤儿进程--------------------------------------进程存在的问题:(1).进程的创建 --- 复制(时间 和 空间的开销很大)(2).进程的运行 --- 调度-->
pthread_create创建一个线程,thread是用来表明创建线程的ID,attr指出线程创建时候的属性,我们用NULL来表明使用缺省属性。start_routine函数指针是线程创建成功后开始执行的函数,arg是这个函数的唯一一个参数。表明传递给start_routine的参数。
pthread_exit函数和exit函数类似用来退出线程.这个函数结束线程,释放函数的资源,并在最后阻塞,直到其他线程使用pthread_join函数等待它。然后将*retval的值传递给**thread_return.由于这个函数释放所以的函数资源,所以retval不能够指向函数的局部变量。
pthread_join和wait调用一样用来等待指定的线程。下面我们使用一个实例来解释一下使用方法.在实践中,我们经常要备份一些文件。下面这个程序可以实现当前目录下的所有文件备份。

1、添加线程相关的头文件:#include<pthread.h>

2、线程创建函数是pthread_create()函数,该函数的原型为:

int pthread_create(pthread_t *thread,pthread_attr_t *attr,void* (*start_routine)(void*),void *arg);

3、线程退出函数是pthread_exit()函数,该函数的原型为:

void pthread_exit(void *retval);

创建线程的示例程序如下:

/*
**程序说明:创建线程函数pthread_create()函数的使用。
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

//打印标识符的函数
void print_ids(const char *str)
{
pid_t pid; //进程标识符
pthread_t tid; //线程标识符

pid=getpid(); //获得进程号
tid=pthread_self(); //获得线程号
printf("%s pid:%u tid:%u (0x%x)
",
str,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid); //打印进程号和线程号
}

//线程函数
void* pthread_func(void *arg)
{
print_ids("new thread:"); //打印新建线程号
return ((void*)0);
}

//主函数
int main()
{
int err;
pthread_t ntid; //线程号

err=pthread_create(&ntid,NULL,pthread_func,NULL); //创建一个线程
if(err != 0)
{
printf("create thread failed:%s
",strerror(err));
exit(-1);
}
print_ids("main thread:"); //打印主线程号
sleep(2);
return 0;
}


进程的生命周期:
[1].创建 --- fork 
[2].执行 --- a. exec
b.子进程实现代码逻辑
[3].结束 --- exit _exit
僵尸态进程---wait waitpid
孤儿进程
--------------------------------------
进程存在的问题:
(1).进程的创建 --- 复制
(时间 和 空间的开销很大)
(2).进程的运行 --- 调度-->



创建线程的方式
答:1.继承thread类 2.实现runnable接口 有返回值:3.callable接口 4.线程池 也可以说是三种方式,线程池是一种封装好的技术。实现callable接口会有一个泛型,这泛型即代表返回值的类型。重写call()方法,得到返回值。然后注意这里使用的时候是先将实例传入FutureTask,然后再将FutureTask传入thread类。然后再st...

C语言多线程的操作步骤
答:线程创建函数原型:intpthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);返回值:若是成功建立线程返回0,否则返回错误的编号。形式参数:pthread_t*restrict tidp要创建的线程的线程id指针;const pthread_attr_t *restrict...

c语言中怎样创建多线程?
答://创建线程1 CreateThread(NULL, // default security attributes 0, // use default stack size ThreadProc1, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //创建线程2 CreateThread(NU...

用C语言开多线程,想让多个相同的子线程同时运行,怎么实现
答:工作线程是处理后台工作的,创建一个线程非常简单,只需要两步:实线线程函数和开始线程.不需要由CWinThread派生类,你可以不加修改地使用CWinThread。AfxBeginThread有两种形式,一种是用来创建用户界面线程的,另一种就是用来创建工作线程的.为了开始执行线程,只需要向AfxBeginThread提供下面的参数就可以了.1...

VC++ 如何创建一个线程并传递参数
答:创建一个工作线程十分简单,只需要两步你的线程就能跑了:(1)实现线程函数和(2)开始线程。不需要由CWinThread派生类,你可以不加修改地使用CWinThread。下面我们来看看如何开始一个线程。AfxBeginThread有两种形式,一种是用来创建用户界面线程的,另一种就是用来创建工作线程的。为了开始执行你的线程,...

C语言怎么写线程代码
答:通常使用CreateThread函数来创建新的线程.(Unix下使用pthread_create函数)首先指出,线程与线程之间,是并列关系,不会存在"父子线程"的概念.在Windows平台下,CreateThread函数包含在 Windows.h 文件内,包含此文件即可正常使用.以下为CreateThread函数的声明:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes...

c语言中怎样创建多线程。最好有一个例子,谢谢!!
答://创建线程1 CreateThread(NULL, // default security attributes 0, // use default stack size ThreadProc1, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //创建线程2 CreateThread...

[高分,急]C语言,如何实现多线程,有具体方案,请提供!
答:实际上C语言是没有多线程的概念的,但是我们可以通过Task来实现多任务。简单的说,可以采取以下方案:定义一个主Task,将其置为常驻Task,用以进行Task调度和Task的启动/终了和交互的管理。定义一个Task优先级列表,用优先级来作为Task调度和管理的基础。定义一个共享域,和相应的事件分发/广播/传递的管理...

请问用C语言在windows上建立多线程需要用什么函数最好,
答://创建在模拟过程中几个必要的信号量 empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,n_Buffer_or_Critical, "semaphore_for_empty"); h_mutex = CreateMutex(NULL,FALSE,"mutex_for_update"); //下面这个循环用线程的ID号来为相应生产线程的产品读写时所 //使用的同步信号量命名; for(j=0;j<...

线程是什么,什么时候使用线程,如何使用线程?
答:一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。在单个程序中同时运行...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网