`
lc52520
  • 浏览: 371436 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C语言线程

阅读更多
    线程相关操作

    一 pthread_t

    pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:
      typedef unsigned long int pthread_t;
      它是一个线程的标识符。

    二 pthread_create

    函数pthread_create用来创建一个线程,它的原型为:
      extern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr,
      void *(*__start_routine) (void *), void *__arg));
      第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。这里,我们的函数thread不需要参数,所以最后一个参数设为空指针。第二个参数我们也设为空指针,这样将生成默认属性的线程。对线程属性的设定和修改我们将在下一节阐述。当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。

    三 pthread_join pthread_exit
      
    函数pthread_join用来等待一个线程的结束。函数原型为:
      extern int pthread_join __P ((pthread_t __th, void **__thread_return));
      第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:
      extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));
      唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。
      在这一节里,我们编写了一个最简单的线程,并掌握了最常用的三个函数pthread_create,pthread_join和pthread_exit。下面,我们来了解线程的一些常用属性以及如何设置这些属性。


    互斥锁相关

    互斥锁用来保证一段时间内只有一个线程在执行一段代码。

    一 pthread_mutex_init

    函数pthread_mutex_init用来生成一个互斥锁。NULL参数表明使用默认属性。如果需要声明特定属性的互斥锁,须调用函数 pthread_mutexattr_init。函数pthread_mutexattr_setpshared和函数 pthread_mutexattr_settype用来设置互斥锁属性。前一个函数设置属性pshared,它有两个取值, PTHREAD_PROCESS_PRIVATE和PTHREAD_PROCESS_SHARED。前者用来不同进程中的线程同步,后者用于同步本进程的不同线程。在上面的例子中,我们使用的是默认属性PTHREAD_PROCESS_ PRIVATE。后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL、PTHREAD_MUTEX_ERRORCHECK、 PTHREAD_MUTEX_RECURSIVE和PTHREAD _MUTEX_DEFAULT。它们分别定义了不同的上所、解锁机制,一般情况下,选用最后一个默认属性。

    二 pthread_mutex_lock pthread_mutex_unlock pthread_delay_np

       pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。

分享到:
评论

相关推荐

    C语言线程API.mht

    此文章系统的讲解了c语言下线程相关的 api及时候关使用场景.

    基于C语言实现的C语言线程库(含源码)

    1. 线程概述 2. 创建线程 2.1 线程函数 2.2 创建线程 3. 线程退出 4. 线程回收 4.1 线程函数 4.2 回收子线程数据 5. 线程分离 6. 其他线程函数 6.1 线程取消 6.2 线程 ID 比较

    基于C语言实现的C语言线程库(含源码).rar

    标题中的“基于C语言实现的C语言线程库”指的是一个使用C语言编写的线程库,线程库是用于创建和管理线程的软件组件,它为程序员提供了在操作系统中创建并行执行任务的接口。C语言由于其底层特性和广泛支持,常被用于...

    C语言线程调度与优先级配置示例

    通过配置线程调度策略与优先级,可使各线程按照设定的顺序执行,从而达到线程间同步的目的,线程属性配置函数包括: pthread_attr_init(&attr[i]);// 初始化线程属性 pthread_attr_setschedpolicy(&attr[i], SCHED...

    C语言线程编程

    本文将深入探讨C语言线程编程及其在Linux系统中的应用。 首先,理解线程的概念至关重要。线程是程序执行的最小单元,每个线程都有自己的程序计数器、栈和局部变量,但共享同一块内存空间,包括全局变量和静态变量。...

    c语言 线程复制文件 or 文件夹

    在C语言中,实现线程复制文件或文件夹涉及到多线程编程和文件操作的知识点。下面我们将详细探讨这些主题。 首先,让我们了解C语言中的线程。在C语言中,我们可以使用POSIX线程库(pthread库)来创建和管理线程。...

    Posix C语言多线程包API

    C语言的多线程包Posix的API参考chm格式

    c语言线程终止练习示例

    C语言线程终止练习示例 C语言线程终止练习示例主要介绍了C语言中线程的基本概念和操作,通过示例代码,展示了线程的创建、执行和终止的过程。 线程的基本概念 在计算机科学中,线程(Thread)是操作系统中的一种...

    C语言线程间通信的通道构造的小型库-CCHAN

    CCHAN 是一个小型的 C 语言库,旨在通过实现“通道”结构来简化线程间的通信。每个通道都是一个固定长度消息的 FIFO 队列,可以自动扩展以腾出空间存储未读消息。写入操作不会阻塞,多个线程可以同时写入和读取通道...

    c语言 日志分级 线程安全 slog.rar

    本文将详细讲解"c语言 日志分级 线程安全 slog"这一主题,以及如何利用名为`slog`的C语言实现的日志模块。 首先,让我们了解日志分级的概念。日志分级是一种管理日志输出的方法,它允许开发者根据信息的重要性和...

    c语言实现循环buffer

    在C语言中实现循环缓冲区需要考虑线程安全问题,以确保在多线程环境下正确地读写数据。 首先,我们来看`cyc_buffer.c`和`cyc_buffer.h`这两个文件。`cyc_buffer.h`通常是头文件,包含循环缓冲区的定义和相关的函数...

    Linux下的多线程(C语言)

    用C语言写的Linux下的多线程

    c语言多进程多线程编程

    C语言作为一门底层且强大的编程语言,提供了丰富的系统调用接口来实现多进程和多线程编程。 **多进程(Multiprocessing)** 1. **进程定义**:进程是程序的一次执行实例,每个进程都有自己的独立内存空间,包括...

    C语言单线程中的通用定时器(原创)

    之前做过基于开发板的单线程2D游戏的开发!根据印象写的一个通用定时器,希望以后用的着,有需要的朋友欢迎下载交流! 例子请看资源:“VC写的字符界面贪吃蛇(原创)- 不闪屏” 环境:code::blocks + MinGW PS:...

    c语言多线程 c语言多线程

    C 语言多线程 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。多线程可以提高应用程序的响应速度、使...

    线程间通信方式3:消息传递方式

    在多线程编程中,线程间通信是一个关键的概念,用于协调不同线程之间的操作,确保数据的一致性和正确性。本示例“线程间通信方式3:消息传递方式”着重介绍了通过消息传递实现线程间的通信。下面将详细阐述这种通信...

    linux下C语言多线程编程实例

    在Linux环境下进行C语言多线程编程,可以利用POSIX线程库,也称为pthread库。这个库提供了创建、同步和管理线程的一系列接口,使得开发者能够在单个进程中同时执行多个任务,从而提高程序的并行性。下面将详细探讨多...

    c语言多线程操作

    在C语言中实现多线程是一项技术挑战,因为C语言本身并不直接支持多线程,而是依赖于特定的系统API或者库。在这个“c语言多线程操作”的项目中,开发者利用了VC++6.0的环境,这是一个早期的集成开发环境(IDE),它...

    基于C语言开发实现的一个用户级线程库.zip

    本次课程设计的目标是开发一个用户级线程库,功能包括完整的线程创建/删除/joining,互斥锁,条件变量,以及一个基于优先级的调度器。完成此用户级线程库,可以使用该线程库编写多线程的应用,替代 Linux 中的 ...

    C语言多线程编程之线程池

    在IT领域,尤其是在系统编程和并发处理中,C语言多线程编程是一个重要的主题。线程池是一种优化的线程管理技术,它提高了系统资源的利用率,并降低了线程的创建和销毁开销。本文将深入探讨C语言中的线程池及其相关...

Global site tag (gtag.js) - Google Analytics