首页 > 系统相关 >进程线程(3)

进程线程(3)

时间:2024-08-14 19:55:06浏览次数:13  
标签:int void 线程 pthread 进程 include

线程的概念

        线程是存在于进程空间中的,使用进程的资源。创建和调度时空开销都比进程小。

  • 进程是资源分配的基本单位。重量级进程。进程空间独立,不能直接通信。
  • 线程是系统调度的最小单位。轻量级进程。一般是一个进程中的多个任务。线程可以共享空间,可以直接通信。

Linux线程

        Linux中的线程库包括LinuxThreads和NPTL(Native Posix Thread Library)。NPTL是实现线程操作的库,创建多线程包括线程空间操作和线程资源回收等过程。

线程的创建pthread_create

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

        (1)功能:该函数可以创建指定的一个线程。

        (2)参数:

                a)thread:线程id,需要实现定义并由该函数返回。           

                b)attr:线程属性(默认(可结合性)和分离属性)。默认属性(NULL)自己手动回收,分离属性系统自动回收。

                c)start_routine:线程执行函数(回调函数),指向指针函数的函数指针。

                d)arg:回调函数的参数,成功返回0,失败返回错误码。                    

#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <unistd.h>

void * do_something(void *arg)
{
   //线程的任务函数 
   printf("------do_something ---- \n");
}

int main(int argc, const char *argv[])
{
	pthread_t tid;
	int ret = pthread_create(&tid,NULL,do_something,NULL);

	if (ret != 0)
	{
		errno = ret;
		perror("pthread_create fail");
		return -1;
	}

	sleep(3);
	return 0;
}

线程的执行就体现在线程的执行函数上。

注意:Compile and link with -pthread

线程的退出

(1)void pthread_exit(void *retval);

         结束调用的进程

        子线程自行退出,参数为线程退出时候的返回状态。

#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <unistd.h>

void * do_something(void *arg)
{
	static int a = 10;
	//线程的任务函数 
	printf("------do_something ---- \n");

	//pthread_exit(NULL);
	pthread_exit(&a);
	//pthread_exit((void *)a);
}

int main(int argc, const char *argv[])
{
	pthread_t tid;
	int ret = pthread_create(&tid,NULL,do_something,NULL);

	if (ret != 0)
	{
		errno = ret;
		perror("pthread_create fail");
		return -1;
	}
	//sleep(3);
   void *retval; 
	//pthread_join(tid,&retval);
	pthread_join(tid,&retval);

	printf("---- main----%d\n",*(int *)retval);
//	printf("---- main----%d\n",(int)retval);

	pthread_exit(NULL);

	return 0;
}

        若用在main函数中,表示结束主线程,进程不一定结束。主线程执行流结束,进程会在其余线程都结束后结束。

总结

        多线程程序设计:可以包括专门的线程进行资源申请和初始化、执行处理程序以及进行资源释放。

        线程间通信:由于线程共享进程资源,需要注意线程间的通信和同步,以保证数据的正确性和安全性。通过合理使用线程,可以提高程序的并发性能,但在使用过程中需要注意线程的安全性、稳定性和调试等问题。希望本文对大家理解和使用Linux中的线程有所帮助,如有不足之处,欢迎大家指正。

标签:int,void,线程,pthread,进程,include
From: https://blog.csdn.net/qq_69639971/article/details/141198490

相关文章

  • Dllhost.exe 是 Windows 操作系统中的一个进程,通常与 COM+ 服务相关。它的主要作用是
    Dllhost.exe是Windows操作系统中的一个进程,通常与COM+服务相关。它的主要作用是运行COM组件和处理进程间的通信。Dllhost.exe的起源可以追溯到MicrosoftWindows2000和WindowsXP的早期版本。它是Windows操作系统的一部分,主要用于支持COM+(ComponentObjectMode......
  • 探索Delphi的多线程世界:线程与进程的奥秘
    探索Delphi的多线程世界:线程与进程的奥秘在现代软件开发中,多线程和多进程是提高应用性能和响应能力的关键技术。Delphi,作为历史悠久的编程语言,提供了丰富的多线程支持。本文将深入探讨Delphi中的线程与进程的区别,并提供实际代码示例,帮助读者理解这两种并发执行方式的内在机......
  • QT多线程
    当处理复杂的数据时,此时耗时间,需要多任务处理就需要用到线程了qt中使用线程的方法,自定义一个类继承QThreadQThread类中有个虚函数 voidrun()才是线程中的处理函数我们需要重写该函数但启动线程不能直接调用run函数,需要通过线程类的start()函数来间接调用run函数......
  • 终止线程 中断标志 vs Interrupt() vs stop()
    退出标志importlombok.SneakyThrows;importjava.text.SimpleDateFormat;publicclassT{staticbooleanflag=true;@SneakyThrowspublicstaticvoidmain(String[]args){Threadthread1=newThread(()->{try{......
  • 线程执行顺序 join()
    importlombok.SneakyThrows;importjava.util.concurrent.TimeUnit;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){Objecto=newObject();Threadthread1=newThread(()->{try{......
  • 线程状态
    阻塞状态importlombok.SneakyThrows;importjava.text.SimpleDateFormat;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){newThread(()->{synchronized(T.class){try{......
  • SpringBoot 整合线程池
    分为三步启动类加@EnableAsync注解在方法上加@Async注解创建线程池配置类1.启动类加@EnableAsync注解@SpringBootApplication@EnableAsyncpublicclassFacadeH5Application{publicstaticvoidmain(String[]args){SpringApplication.run(Fac......
  • c++ 线程函数传递数据 namespace
     CMakeLists.txt cmake_minimum_required(VERSION3.10)#Settheprojectnameproject(GlobalMatrixExample)#FindEigenpackagefind_package(Eigen33.3REQUIRED)#Findpthreadpackagefind_package(ThreadsREQUIRED)#Addexecutableadd_executable(g......
  • linux系统常见及常用的命令操作(进程管理、网络通信篇)
    ​​​前言本人是互联网新人,自己整理了一些工作中经常用到的Linux常用命令;一是为了让自己更加清晰认识,再一个希望能帮助到大家和未来的新人;编辑实属不易,轻喷,都是一字字打出来的;后续会慢慢调整编写模式;提示:以下是本篇文章正文内容,下面案例可供参考;只摘要部分命令选项,如需深......
  • c# 多线程环境下对共享资源访问的办法
    Monitor:定义:Monitor 是C#中最基本的同步机制,通过 Enter 和 Exit 方法来控制对共享资源的访问。它提供了排他锁的功能,确保在任何时刻只有一个线程可以访问共享资源。优点:简单易用,适合对临界区进行粗粒度的同步控制。缺点:只能实现排它锁,不能实现读写锁,性能相对较低。......