`
gstarwd
  • 浏览: 1536685 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux下线程的挂起和恢复

阅读更多

POSIX的Linux操作系统没有提供线程挂起和恢复的例程,在网上找了找,看到一个老外写的程序,感觉想法不错,放在这里大家分享一下。理论上应该可以实现,不过我没有试,给大家提供一个参考。 (在读取缓存里的数据时,当缓存中没有数据最好把线程挂起)

void CPrcThread <Worker>::suspend()
{
    ifdef WIN32
    //do windows specific things here...
    #endif

    #ifdef __linux__
    pthread_mutex_lock(&mutex);
    flag--;
    pthread_mutex_unlock(&mutex);
    #endif
}

void CPrcThread <Worker>::resume()
{
        #ifdef WIN32
        //do windows specific things here...
        #endif

        #ifdef __linux__
        pthread_mutex_lock(&mutex);
        flag++;
        pthread_cond_signal(&cond);
        pthread_mutex_unlock(&mutex);
        #endif
}

void* CPrcThread <Worker>::threadFunc(void* pParameter)
{

    while(1)
    {

          #ifdef WIN32
        //do windows specific things here...
        //no member variables accessed here so its ok...
        #endif


        #ifdef __linux__
          pthread_mutex_lock(&mutex);
          while(flag <= 0)
          {
                  pthread_cond_wait(&cond, &mutex);
          }
          pthread_mutex_unlock(&mutex);
          #endif


          //actual thread work here

    }

}
 

 

分享到:
评论

相关推荐

    linux线程的挂起与恢复

    在提供的代码示例中,线程挂起通过共享变量`wqy_pthread_pause`、互斥锁`wqy_mutex_pause`和条件变量`wqy_cond_pause`实现。`wqy_pthread_suspend`函数用于挂起线程。首先,它检查`wqy_pthread_pause`的值,如果为`...

    linux下多线程文件下载源码

    非阻塞I/O在数据未准备好时不会使线程挂起,而是立即返回,提高了系统的并发能力。异步I/O则由操作系统负责完成数据的读写,通知线程时数据已经准备就绪,进一步提升了效率。 在文件拼接方面,所有线程下载的片段...

    linux 多线程合集

    4. **线程管理**:线程可以被挂起、恢复、取消或合并。`pthread_join()`函数用于等待线程结束,`pthread_detach()`让线程成为守护线程,`pthread_cancel()`用于取消线程。 5. **线程安全**:线程安全的函数或数据...

    linux多线程编程_吸烟者问题

    条件变量允许线程在满足特定条件时挂起,直到其他线程改变条件使其恢复运行。 以下是一个简单的示例: 1. 定义资源(烟、火柴、报纸)和一个表示资源是否可用的布尔标志。 2. 使用互斥锁保护资源和标志,确保在...

    linux下多线程程序设计

    条件变量主要用于解决生产者消费者等问题,即当某些条件不满足时,可以让线程暂时挂起,直到条件满足后再恢复运行。 - **作用**:条件变量使得线程可以在特定条件下阻塞自身,并在条件满足时被唤醒。 - **数据类型*...

    操作系统(进程和线程创建及其线程模型).docx

    - 用户级线程执行系统调用会导致整个进程被挂起。 - 内核级线程执行系统调用不会影响同一进程内的其他线程。 3. **运行状态**: - 用户级线程只能运行在用户态。 - 内核级线程可以在用户态和内核态运行。 4. **...

    UNIX Linux实验教程 6实验六Windows2000多进程和多线程机制.doc

    线程的状态可以通过挂起和恢复来控制。`CREATE_SUSPENDED`标志可以在创建线程时使线程暂停,然后使用`ResumeThread()`恢复执行。挂起线程可以防止其立即开始执行,以便在必要的时候进行初始化或者其他设置。 4. ...

    线程相关技术26.rar_线程相关技术

    本资料"线程相关技术26.rar"主要涵盖了线程的创建、终止、休眠、挂起以及优先级等核心概念,这些都是理解和掌握线程编程的关键。 首先,线程的建立是程序运行的基础。在Java中,可以通过实现Runnable接口或继承...

    linux任务和信号量的使用

    其他试图访问该资源的任务如果发现信号量为0,则会被挂起,直到持有资源的任务完成并调用`sem_v()`恢复信号量计数。这种机制确保了在同一时刻只有一个任务能访问共享资源。 同时,信号量还能实现简单的进程间通信...

    定时任务及线程监控VC源码

    开发者可以通过监控线程的状态,如运行、挂起、等待、终止等,来确保程序的稳定运行。在VC中,可以使用`OpenThread`和`QueryThreadCycleTime`等API获取线程信息,用`ResumeThread`和`SuspendThread`控制线程的暂停与...

    基于linux cpp实现的协程库coroutine

    协程可以看作是用户级别的线程,它们可以在执行过程中暂停(挂起)并恢复,而不会丢失状态。与线程相比,协程的创建和销毁成本更低,同时避免了线程间通信的复杂性。在C++中,自C++17版本开始,标准库提供了对协程的...

    进程线程方面的应用程序

    5. **线程生命周期**:线程的启动、执行、挂起、恢复、终止等状态及其转换。 6. **线程安全编程**:避免竞态条件,确保在多线程环境下代码的正确性,例如使用`Interlocked`函数进行原子操作。 通过实例代码,我们...

    Linux进程基本管理与进程控制

    在 Linux 环境下,进程的基本操作包括创建、运行、挂起、恢复和终止等。创建进程可以使用 fork() 系统调用,而运行进程可以使用 exec() 系统调用。挂起进程可以使用 pause() 系统调用,而恢复进程可以使用 signal() ...

    c++多线程编程入门

    同样,挂起和恢复线程的操作在C++标准库中并未直接支持,因为这些操作可能导致线程死锁和其他并发问题。通常建议使用互斥锁和条件变量等同步原语来控制线程执行流程。 通过理解和掌握上述知识点,你可以开始编写...

    《多线程编程技术》

    挂起线程可以暂停线程的执行,而重新运行线程则使其恢复执行。 ##### 2.6 等待线程结束 等待线程结束意味着主线程会阻塞直到被等待的线程完成其执行。 ##### 2.7 让进程先处理另一个线程 有时需要让当前线程放弃...

    玩转多线程编程

    - **挂起**:线程被暂停执行,等待其他线程唤醒。 - **就绪**:线程准备好执行,等待CPU分配时间片。 #### 经常遇到的问题 - **死锁**:多个线程相互等待对方持有的资源,导致所有线程都无法继续执行。 - **性能...

    JAVA线程上下文切换.docx

    Java线程上下文切换是并发编程中的一个重要概念,它涉及到多线程环境下CPU时间片分配、任务状态保存与恢复以及由此带来的性能影响。上下文切换是操作系统为了实现多任务并发执行而采取的一种策略,即使得在单核CPU上...

    多线程编程模型API

    - **条件变量与互斥量**(Chap3):条件变量是线程等待特定条件满足时挂起的工具,通常与互斥量结合使用,确保线程安全地等待和唤醒。 - **二进制信号量与互斥量**(Chap4):二进制信号量是另一种同步机制,只有0...

    华清远见原创教材《嵌入式Linux应用程序开发标准教程》(第2版)

    4. **进程控制**:第7章讲解了进程的生命周期管理,包括创建、终止、挂起、恢复等操作,以及如何通过fork()、exec()、wait()等系统调用来控制进程。 5. **多线程编程**:第9章涉及多线程编程,讲述了线程的创建、...

    多线程编程技术《Programming Multithreaded applications

    线程可以被挂起以暂停其执行,也可以在适当的时候恢复其执行。 ##### 等待线程结束 等待线程结束是为了确保主线程在子线程完成工作后再继续执行,可以通过`join()`等函数实现。 ##### 让进程先处理另一个线程 有时...

Global site tag (gtag.js) - Google Analytics