多线程问题,一直是我的一个噩梦,老是搞不清楚怎么回事,真是很惭愧呀,所以今天特地向各位的大大求教。
代码如下:
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++多线程 windows
以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **创建线程** C++11引入了`std::thread`库来创建和管理线程。例如,你可以通过传递函数或成员函数...
在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的问题。 一、C++11及后续版本中的多线程支持 自C++11标准开始,C++提供了内置的多线程库`<thread>`,...
总的来说,实现C++多线程日志记录需要理解多线程编程、同步机制以及日志管理的原理。通过分析提供的源代码文件,我们可以学习到如何将这些理论知识应用到实际的开发中,从而提高程序的并发性能和日志处理能力。
总结C++中多线程要注意的事项,不能跨线程调用MFC对象等等
本文将深入探讨如何使用VS2010进行C++多线程开发,通过一个具体的Demo来阐述相关概念和技术。 首先,我们要明白C++中的多线程。在单线程程序中,所有任务都在同一个执行流中完成,而多线程则允许程序同时执行多个...
在C++编程中,多线程SOCKET收发是一项重要的技术,它允许程序同时处理多个网络连接,提高系统的并发性能。下面将详细讲解这个主题,包括C++中的多线程概念、SOCKET基础以及如何结合两者实现数据的收发。 首先,让...
总的来说,“文件打印问题”的多线程实现是理解和掌握C++并发编程的一个好例子。它涉及到线程同步、互斥访问和资源管理,这些都是现代软件开发中的核心技能。通过学习和实践,开发者能够编写出更高效、更可靠的并发...
标题:C++多线程详解 描述:本文深入探讨了C++中多线程的实现与管理,通过一系列实例和理论解析,旨在帮助读者全面掌握C++多线程编程技术。 知识点: ### 1. 多线程概念 在计算机程序设计中,多线程是一种允许多...
C++多线程,消息队列用法,为了凑够20个字,拼了。
P303.zip
C++多线程编程入门教程 本文将对C++多线程编程进行详细的介绍,从多线程概念的定义到实际的编程实现。同时,文章还将对Linux和Windows平台下的多线程实现进行比较,并提供了相关的示例代码。 一、多线程概念 在...
本示例"MultiThread"可能是包含一个C++多线程演示的代码库。 在C++11及其后续版本中,多线程功能被正式引入到标准库中,通过`<thread>`头文件提供。下面我们将深入探讨C++多线程的关键概念和实现方式: 1. **线程...
C++多线程是现代编程中的重要概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在本“经典C++多线程演示”中,我们将深入探讨C++11及后续标准引入的多线程库,如何创建、启动、调度、同步、挂起...
总的来说,C++多线程内存池和简单的BUFFER类是解决高并发、高性能问题的有效手段。通过合理的设计和实现,我们可以创建出高效、稳定、线程安全的程序。在实际应用中,这不仅可以优化内存管理,还能降低延迟,提升...
C++多线程是现代C++编程中一个重要的特性,它允许程序同时执行多个任务,以提高程序的并发性和效率。在C++11及更高版本中,标准库提供了对多线程的支持,使得开发者可以方便地创建和管理线程。 在C++中,创建线程...