线程的创建等待及退出 代码源码举例

简介: 线程的创建等待及退出 代码源码举例
#include<stdio.h>
#include<pthread.h>
void *funcl(void *arg)
{
        printf("t1: %ld thread is create\n",(unsigned long) pthread_self());//pthread_self()为获取线程ID号
        printf("t1:param is %d\n",*((int *)arg));//打印主进程给的参数
}
int main()
{
        int ret;
        int param = 100;
        pthread_t t1;
        ret = pthread_create(&t1, NULL, funcl,(void *)&param);//创建funcl线程,传参并 将返回值给ret
        if(ret == 0){
                printf("main:create t1 success\n");//说明创建成功
        }
        printf("main: %ld\n",(unsigned long)pthread_self());//获取线程ID号
        while(1);//为了等待t1线程执行,不然没等运行,主进程就结束了
        return 0;
}
~  

执行显示:

CLC@Embed_Learn:~/liuzhihao$ ./a.out

main:create t1 success

main: 139744965641984

t1: 139744957355776 thread is create

t1:param is 100

相关文章
|
2月前
多线程案例-定时器(附完整代码)
多线程案例-定时器(附完整代码)
242 0
|
4月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
28 0
|
4月前
|
Java
Java使用线程池代码
Java使用线程池代码
35 0
|
4月前
|
消息中间件 Dubbo Java
多线程到底用不用在业务代码上???
在当今的软件开发中,多线程技术是一种常见的优化方式,可以显著提高程序的性能和响应能力。然而,对于业务代码是否应该使用多线程,不同的开发者和专家可能会有不同的看法和经验。在这篇文章中,我们将探讨多线程在业务代码中的应用,并分析其利弊。综上所述,是否在业务代码中使用多线程需要根据具体情况来决定。如果业务系统需要同时处理多个任务,并且每个任务都可以独立地执行,那么使用多线程可以提高系统的性能和响应能力。然而,如果业务逻辑比较简单,或者系统的设计不允许使用多线程,那么使用单线程可能更加简单和安全。
63 1
|
4月前
|
Java
|
9天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
38 1
|
2月前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解08-阻塞队列之LinkedBlockingDeque
**摘要:** 本文分析了Java中的LinkedBlockingDeque,它是一个基于链表实现的双端阻塞队列,具有并发安全性。LinkedBlockingDeque可以作为有界队列使用,容量由构造函数指定,默认为Integer.MAX_VALUE。队列操作包括在头部和尾部的插入与删除,这些操作由锁和Condition来保证线程安全。例如,`linkFirst()`和`linkLast()`用于在队首和队尾插入元素,而`unlinkFirst()`和`unlinkLast()`则用于删除首尾元素。队列的插入和删除方法根据队列是否满或空,可能会阻塞或唤醒等待的线程,这些操作通过`notFul
254 5
|
2月前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解07-阻塞队列之LinkedTransferQueue
`LinkedTransferQueue`是一个基于链表结构的无界并发队列,实现了`TransferQueue`接口,它使用预占模式来协调生产者和消费者的交互。队列中的元素分为数据节点(isData为true)和请求节点(isData为false)。在不同情况下,队列提供四种操作模式:NOW(立即返回,不阻塞),ASYNC(异步,不阻塞,但后续线程可能阻塞),SYNC(同步,阻塞直到匹配),TIMED(超时等待,可能返回)。 `xfer`方法是队列的核心,它处理元素的转移过程。方法内部通过循环和CAS(Compare And Swap)操作来确保线程安全,同时避免锁的使用以提高性能。当找到匹
243 5
|
2月前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解04-阻塞队列之PriorityBlockingQueue原理及扩容机制详解
1. **继承实现图关系**: - `PriorityBlockingQueue`实现了`BlockingQueue`接口,提供了线程安全的队列操作。 - 内部基于优先级堆(小顶堆或大顶堆)的数据结构实现,可以保证元素按照优先级顺序出队。 2. **底层数据存储结构**: - 默认容量是11,存储数据的数组会在需要时动态扩容。 - 数组长度总是2的幂,以满足堆的性质。 3. **构造器**: - 无参构造器创建一个默认容量的队列,元素需要实现`Comparable`接口。 - 指定容量构造器允许设置初始容量,但不指定排序规则。 - 可指定容量和比较
230 2
|
2月前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解03-阻塞队列之LinkedBlockingQueue
LinkedBlockingQueue 和 ArrayBlockingQueue 是 Java 中的两种阻塞队列实现,它们的主要区别在于: 1. **数据结构**:ArrayBlockingQueue 采用固定大小的数组实现,而 LinkedBlockingQueue 则使用链表实现。 2. **容量**:ArrayBlockingQueue 在创建时必须指定容量,而 LinkedBlockingQueue 可以在创建时不指定容量,默认容量为 Integer.MAX_VALUE。 总结起来,如果需要高效并发且内存不是主要考虑因素,LinkedBlockingQueue 通常是更好的选择;
180 1