`
ludatong110
  • 浏览: 38596 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++多线程问题

    博客分类:
  • C++
 
阅读更多

多线程问题,一直是我的一个噩梦,老是搞不清楚怎么回事,真是很惭愧呀,所以今天特地向各位的大大求教。

 

代码如下:

 

C++

 

#include "www.h"
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/time.h>

pthread_cond_t cond;
pthread_mutex_t mutex;
long m_dwTimeout = 0;

void printids(const char *s) {
    pid_t pid;
    pthread_t tid;

    pid = getpid();
    tid = pthread_self();
    printf("%s pid %u tid %u (0x%x)\n", s, (unsigned int) pid,
            (unsigned int) tid, (unsigned
            int) tid);

    for (int i = 0; i < 100; i++) {
        printf("%s : %d\n", s, i);
    }
}

void *thr_fn1(void *arg) {
    printids("new thread1:");


    pthread_exit((void *) NULL);
}

void *thr_fn2(void *arg) {
    printids("new thread1:");


    pthread_exit((void *) NULL);
}

int main() {
    int err1, err2;
    pthread_attr_t attr1, attr2;
    pthread_t ntid1, ntid2;

    pthread_attr_init(&attr1);
    pthread_attr_init(&attr2);
    pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED);
    pthread_attr_setdetachstate(&attr2, PTHREAD_CREATE_DETACHED);
    err1 = pthread_create(&ntid1, &attr1, thr_fn1, NULL);

    struct timeval now;
    gettimeofday(&now, NULL);
    struct timespec abstime;
    abstime.tv_nsec = now.tv_usec * 1000 + (m_dwTimeout % 1000) * 1000000;
    abstime.tv_sec = now.tv_sec + (m_dwTimeout / 1000);

    if (err1 != 0) {
        printf("can't create thread: %s\n", strerror(err1));
        return 1;
    }
//    pthread_mutex_lock(&mutex);
//    pthread_cond_timedwait(&cond, &mutex, &abstime);
//    pthread_mutex_unlock(&mutex);

    err2 = pthread_create(&ntid2, &attr2, thr_fn2, NULL);
    if (err2 != 0) {
        printf("can't create thread: %s\n", strerror(err2));
        return 1;
    }
    pthread_mutex_lock(&mutex);
    pthread_cond_timedwait(&cond, &mutex, &abstime);
//    printids("new thread2:");
    pthread_mutex_unlock(&mutex);

//    printids("main thread:");
//    sleep(1);
    return 0;
}

 

 

本人启用两个线程做i++运算,两个线程应该是竞争输出,可是结果却是按照出现顺序输出,是在是很费解,请各位大大费心了。

分享到:
评论

相关推荐

    C++多线程问题汇总

    C++多线程常见问题汇总,快来学习吧~~~~~~~~~~~~~~~~~~~~~~~~

    C++多线程编程.pdf

    C++多线程编程

    C++多线程编程实战

    C++多线程 windows

    c++多线程编程的十个例子

    以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **创建线程** C++11引入了`std::thread`库来创建和管理线程。例如,你可以通过传递函数或成员函数...

    C++多线程学习

    在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的问题。 一、C++11及后续版本中的多线程支持 自C++11标准开始,C++提供了内置的多线程库`&lt;thread&gt;`,...

    C++ 多线程日志记录

    总的来说,实现C++多线程日志记录需要理解多线程编程、同步机制以及日志管理的原理。通过分析提供的源代码文件,我们可以学习到如何将这些理论知识应用到实际的开发中,从而提高程序的并发性能和日志处理能力。

    C++多线程之注意事项

    总结C++中多线程要注意的事项,不能跨线程调用MFC对象等等

    C++多线程SOCKET收发

    在C++编程中,多线程SOCKET收发是一项重要的技术,它允许程序同时处理多个网络连接,提高系统的并发性能。下面将详细讲解这个主题,包括C++中的多线程概念、SOCKET基础以及如何结合两者实现数据的收发。 首先,让...

    C++多线程基类C++多线程基类C++多线程基类

    C++多线程是编程中一个重要的概念,它允许程序同时执行多个独立的任务,从而提高程序的执行效率。在C++中,多线程的实现通常依赖于平台相关的API,如POSIX线程库(pthread)对于Unix-like系统。本文将深入探讨C++中...

    文件打印问题 (c++多线程实现)

    总的来说,“文件打印问题”的多线程实现是理解和掌握C++并发编程的一个好例子。它涉及到线程同步、互斥访问和资源管理,这些都是现代软件开发中的核心技能。通过学习和实践,开发者能够编写出更高效、更可靠的并发...

    C++多线程详解

    标题:C++多线程详解 描述:本文深入探讨了C++中多线程的实现与管理,通过一系列实例和理论解析,旨在帮助读者全面掌握C++多线程编程技术。 知识点: ### 1. 多线程概念 在计算机程序设计中,多线程是一种允许多...

    C++多线程,消息队列用法

    C++多线程,消息队列用法,为了凑够20个字,拼了。

    C++多线程编程实战 _C++_线程进程_thread_

    P303.zip

    C++多线程编程入门教程

    C++多线程编程入门教程 本文将对C++多线程编程进行详细的介绍,从多线程概念的定义到实际的编程实现。同时,文章还将对Linux和Windows平台下的多线程实现进行比较,并提供了相关的示例代码。 一、多线程概念 在...

    C++多线程demo

    本示例"MultiThread"可能是包含一个C++多线程演示的代码库。 在C++11及其后续版本中,多线程功能被正式引入到标准库中,通过`&lt;thread&gt;`头文件提供。下面我们将深入探讨C++多线程的关键概念和实现方式: 1. **线程...

    经典c++多线程演示

    C++多线程是现代编程中的重要概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在本“经典C++多线程演示”中,我们将深入探讨C++11及后续标准引入的多线程库,如何创建、启动、调度、同步、挂起...

    C++多线程内存池和简单的BUFFER类

    总的来说,C++多线程内存池和简单的BUFFER类是解决高并发、高性能问题的有效手段。通过合理的设计和实现,我们可以创建出高效、稳定、线程安全的程序。在实际应用中,这不仅可以优化内存管理,还能降低延迟,提升...

    c++多线程源码

    C++多线程是现代C++编程中一个重要的特性,它允许程序同时执行多个任务,以提高程序的并发性和效率。在C++11及更高版本中,标准库提供了对多线程的支持,使得开发者可以方便地创建和管理线程。 在C++中,创建线程...

Global site tag (gtag.js) - Google Analytics