简单c语言多线程参数,C语言多线程编程

本文目录一览:

C语言线程函数参数问题

·线程创建

函数原型:int pthread_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 attr创建线程时的线程属性;

void* (start_rtn)(void)返回值是void类型的指针函数;

void *restrict arg start_rtn的形参。 =====这个地方就可以传参数,

注意,这个地方是个指针,要想传多个参数,可以定义一个结构体,把要传的参数包起来,传结构体的地址就ok

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 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。

c语言实现多线程

目录:

Linux操作系统,C语言实现多线程

Windows操作系统,C语言实现多线程

Windows下的多线程(不带停止)

Linux操作系统,C语言实现多线程:

#include stdio.h

#include stdlib.h

#include pthread.h

void * ThreadOne ( void * threadArg )

{

    printf ( “线程开始啦,参数是:%s\n” , (char *)threadArg );

    return NULL;

}

int main ( void )

{

    pthread_t ThreadID;   /* 记录线程标识符 */

    void * waitingResult;  /* 等待线程退出的等待结果 */

    int errorCode;         /* 记录线程的错误代码 */

    char * aMessage = “这是线程的参数” ;

    /* 创建并启动线程ThreadOne。若返回值非零,则线程创建失败 */

    errorCode = pthread_create( ThreadID, NULL, ThreadOne, aMessage );

    if ( errorCode != 0 )

    {

        printf (“线程ThreadOne创建失败。错误代码:%d\n”, errorCode );

        return EXIT_FAILURE ;

    }

    /* 等待线程标识符为的ThreadID的线程结束 */

    errorCode = pthread_join( ThreadID, waitingResult );

    if ( errorCode != 0 )

    {

        printf ( “等待线程退出等待失败。错误代码:%d\n” , errorCode ) ;

        return EXIT_FAILURE ;

    }

    printf( “线程的返回值是%p\n”, waitingResult );

    return EXIT_SUCCESS ;

}

Windows操作系统,C语言实现多线程:

#include stdio.h

#include windows.h

DWORD APIENTRY ThreadOne ( LPVOID threadArg )

{

    printf ( “线程开始啦,参数是:%s\n” , (char *)threadArg );

    return 0;

}

int main ( void )

{

    HANDLE hThread;  /* 记录线程句柄 */

    DWORD ThreadID;  /* 记录线程ID号 */

    DWORD waitingResult;  /* 等待线程退出的等待结果 */

    DWORD threadExitCode;  /* 记录线程的返回值 */

    char * aMessage = “这是线程的参数” ;

    /* 创建并启动线程ThreadOne,返回值为线程句柄,赋值给hThread */

    hThread = CreateThread ( NULL, 0L, ThreadOne, (LPVOID)aMessage, 0L, ThreadID );

    if ( hThread == NULL )

    {

        printf (“线程ThreadOne创建失败。错误代码:%lu\n”, GetLastError() );

        return EXIT_FAILURE ;

    }

    /* 等待线程句柄为的hThread线程结束 */

    waitingResult = WaitForSingleObject ( hThread, INFINITE );

    if ( waitingResult == WAIT_FAILED )

    {

        printf ( “等待线程退出等待失败。错误代码:%lu\n” , GetLastError() ) ;

        return EXIT_FAILURE ;

    }

    if ( GetExitCodeThread ( hThread , threadExitCode ) )

        printf ( “线程的返回值是%lu\n”, threadExitCode ) ;

    else

        printf ( “获取线程的返回值获取失败。错误代码:%lu\n” , GetLastError() ) ;

    return EXIT_SUCCESS ;

}

Windows下的多线程:(不带停止)

#include stdio.h

#include windows.h

DWORD WINAPI duoxianchen(LPVOID lpParam);

int main(int argc, char *argv[])

{

int num=0;

CreateThread(NULL,NULL,duoxianchen,num,NULL, NULL);

while(1)

{

num++; 

printf(“主线程! %05d\n”,nu***eep(40);

}

return 0;

}

DWORD WINAPI duoxianchen(LPVOID lpParam)

{

int* a=lpParam;

while(1) 

{

++*a; 

printf(“副线程! %05d 0x%p\n”,*a,a); 

Sleep(80);

}

return 0;

}

多线程pthread_create的参数

C语言使用pthread_create()函数完成多线程的创建,pthread_create()函数共有四个参数。这四个参数分别为:

第一个 参数负责向调用者传递子线程的线程号

第二这个参数负责控制线程的各种属性,这也是线程在创建的时候,最为复杂的一个参数。下面是这个结构体的定义:

在结构体中的第一个参数 detachstate 说明了线程的分离状态。

PTHREAD_CREATE_DETACHED 分离状态:父线程在创建子线程之后,,父线程不会去等待子线程结束再去运行自己接下来的程序;

PTHREAD_CREATE_JOINABLE 状态:父线程会等待子线程运行结束,才继续运行接下来的程序。

注意的是如果当线程一旦处于 PTHREAD_CREATE_DETACHED 状态,那么线程的状态就无法再被修改了。线程创建时默认设置为PTHREAD_CREATE_JOINABLE状态

schedpolicy说明的是线程的调度策略,这个值可以分别被设置为:

SCHED_FIFO: 先进先出

SCHED_RR: 轮转法

SCHED_OTHER: 其他方法

schedparam参数实际上设置的是线程的优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效

这个参数设置线程的调度参数是拷贝父线程的线程调度参数,还是上面的两个参数 schedpolicy 和 schedparam 属性进行设置。

该参数可以被设为:

PTHREAD_INHERIT_SCHED :表示新现成将继承创建线程的调度策略和参数)

PTHREAD_EXPLICIT_SCHED :表示使用在schedpolicy和schedparam属性中显式设置的调度策略和参数

scope参数设置的是线程优先级的使用范围。

PTHREAD_SCOPE_PROCESS 进程级竞争资源

PTHREAD_SCOPE_SYSTEM 系统级竞争资源

这个参数是线程栈的起始地址,这个参数只有在线程栈由自己创建时,才需要设置。当线程栈由用户直接创建,而不是通过系统创建时,线程栈的大小和位置都可以进行修改,但是用户程序需要完成对线程栈空间的释放。在设置该参数之后,guardsize警戒栈缓冲区的大小就变为0,为了防止栈溢出就需要对线程栈的境界栈缓冲区进行设置。

这个参数设置警戒栈缓冲区的大小。警戒栈缓冲区可以保护程序,防止栈溢出对数据造成破坏。

stacksize参数在线程创建之前创建,用来修改创建的线程栈的大小,但是最小不能低于 PTHREAD_STACK_MIN (16384) bytes ,即16k内存大小,也就是4个内存页(4个内存页这一点由内核决定)。

这个参数负责指定子线程需要允许的函数,这个参数需要的是一个函数指针。

这个参数负责指定,子线程所运行的函数的参数值。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/237216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:04
下一篇 2024-12-12 12:04

相关推荐

  • 三星内存条参数用法介绍

    本文将详细解释三星内存条上面的各种参数,让你更好地了解内存条并选择适合自己的一款。 一、容量大小 容量大小是内存条最基本的参数,一般以GB为单位表示,常见的有2GB、4GB、8GB…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python简单数学计算

    本文将从多个方面介绍Python的简单数学计算,包括基础运算符、函数、库以及实际应用场景。 一、基础运算符 Python提供了基础的算术运算符,包括加(+)、减(-)、乘(*)、除…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python input参数变量用法介绍

    本文将从多个方面对Python input括号里参数变量进行阐述与详解,并提供相应的代码示例。 一、基本介绍 Python input()函数用于获取用户输入。当程序运行到inpu…

    编程 2025-04-29
  • Spring Boot中发GET请求参数的处理

    本文将详细介绍如何在Spring Boot中处理GET请求参数,并给出完整的代码示例。 一、Spring Boot的GET请求参数基础 在Spring Boot中,处理GET请求参…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29

发表回复

登录后才能评论