线程的创建和参数传递

线程的创建

 #include  <pthread.h>

 int  pthread_create(pthread_t *thread, const thread_attr_t *attr, void *(*routine)(void *), void *arg);

 成功返回0,失败时返回错误码

 thread 线程对象

 attr 线程属性,NULL代表默认属性

 routine 线程执行的函数

 arg 传递给routine的参数 ,参数是void * ,注意传递参数格式,

编译错误分析:

1.

createP_t.c:14:36: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [-Wincompatible-pointer-types]

     ret = pthread_create(&tid,NULL,testThread,NULL);

In file included from createP_t.c:1:0:

/usr/include/pthread.h:233:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘int * (*)(char *)’

意义:表示pthread_create参数3的定义和实际代码不符合,期望的是void * (*)(void *) ,实际的代码是int * (*)(char *)

解决方法:改为pthread_create(&tid,NULL,(void*)testThread,NULL);

2.

createP_t.c:(.text+0x4b):对‘pthread_create’未定义的引用

collect2: error: ld returned 1 exit status   --------这个链接错误,

表示pthread_create这个函数没有实现

解决方法:编译时候加 -lpthread

注意事项:1. 主进程的退出,它创建的线程也会退出。

线程创建需要时间,如果主进程马上退出,那线程不能得到执行

所以会在主进程加入休眠1s

获取线程的id

通过pthread_create函数的第一个参数;

通过在线程里面调用pthread_self函数

 地址传递:

  1. 通过地址传递参数,注意类型的转换

值传递:值传递,这时候编译器会告警,需要程序员自己保证数据长度正确

运行错误:

*** stack smashing detected ***: ./mthread_t terminated

已放弃 (核心已转储)

原因:栈被破坏了(数组越界)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 FastAPI 中创建线程并传递参数可以使用 Python 中的 threading 模块,示例如下: ```python import threading from fastapi import FastAPI app = FastAPI() def my_function(arg1, arg2): """ 你想要在新线程中执行的函数 """ # 执行你的代码 result = arg1 + arg2 return result @app.get("/") async def root(): # 创建一个新线程并传递参数 thread = threading.Thread(target=my_function, args=(1, 2)) thread.start() thread.join() # 等待线程执行完毕 result = thread.result # 获取线程执行结果 return {"result": result} ``` 在这个示例中,我们定义了一个名为 `my_function` 的函数,它接受两个参数,并返回它们的和。在 FastAPI 中,我们在路由函数上使用 `@app.get("/")` 装饰器,这表示这个路由函数将处理 GET 请求。在路由函数内部,我们使用 `threading.Thread()` 方法创建一个新的线程,并传递参数 `arg1` 和 `arg2` 给 `my_function` 函数。然后我们使用 `thread.start()` 方法启动线程并让它开始执行。 接下来,我们使用 `thread.join()` 方法等待线程执行完毕。这个方法会阻塞当前线程,直到被等待的线程执行完毕。最后,我们使用 `thread.result` 属性获取线程执行结果,并将它作为 JSON 响应返回给客户端。 需要注意的是,如果你在使用线程时需要访问数据库或其他 I/O 操作,最好使用异步方式进行,以避免阻塞主线程。为了实现这一点,你可以使用 Python 的 asyncio 库或第三方库如 aiohttp。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值