c++ 枚举用到了c++11规范里的多线程,然后编译的时候就报错了,中午各种改CMakeLists没搞定,下午师弟介绍文档,cmake practice,参考第七章,搞定了。只需要CMakeLists.txt里添加一句话:set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11 -pthread")开始的时候没有-pthread能make,但运行的时候就崩溃了,参考这里解决。根据讨论,桌面Linux环境这样就行了,如果是嵌入式交叉编译环境的话,还需要显示添加find_package (Threa...
1 #include <QCoreApplication>2 #include <thread>3 #include <iostream>4 5/* 6 * 话题1:转移线程的所有权。7 * std::thread 构造函数需传入一个函数或可调用对象, 每一个 std::thread 都关联着一个函数或可调用对象。8 * 两者之间的关联性,在不同 std::thread 对象之间是可以发生转移的。9 * 比如:函数 fun()本来与 std::thread A 关联着,我们可以通过转移线程的所有权,
10 * 将 func() 与 std::thread ...
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。首先给出饿汉模式的实现template <class T>
class singleton
{
private:singleton(){};singleton(const singleton&){};//禁止拷贝singleton& operator=(const singleton&){};//禁止赋值static T* m_instance;
public:static T* GetInstance();
};template <class T>
T* singleton<T>::GetInstance()
{return m_instance...
1. 死锁与解锁:#include <iostream>
#include <thread>
#include <mutex>usingnamespace std;//thread引用类型函数,模板,避免类型转换,尽量指针,引用
//锁住一个变量之后,尽快操作完解锁,不要再锁,否则互锁#define COUNT 100000
mutex g_mutex1, g_mutex2;//互斥量void add1(int *p1, int *p2)
{for (int i = 0; i < COUNT; i++){/*g_mutex1.lock();p1++;g_mutex2.lock();p2++;g_mutex1.unlock();g_mutex2.unlock();*/g_mu...
http://baptiste-wicht.com/posts/2012/04/c11-concurrency-tutorial-advanced-locking-and-condition-variables.html ?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647structBoundedBuffer { int* buffer; intcapacity; intfront; intrear; intcount; std::mutex lock; std::condition_variable not_full; std::condition_variable not_empty; BoundedBu...
C++对多线程新加的支持操作 内存池 面试题1.题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码#include <iostream> // std::cout
#include <mutex>
#include <thread> // std::thread
#include <condition_variable>usingnamespace std;mutex mu;
int flag = 10;
condition_variable cv;
void f(int num)
{for (int i ...
c++11的thread库提供了获取tid的接口:std::this_thread::get_id()这个接口返回的是一个内存地址指向表述线程的结构体(pthread也是一样)。有的时候这种方式获取的pid过长,可以使用syscall获取lwp,也就是top -H中看到的id,但也要注意syscall造成的的开销: 1 #include <iostream>2 #include <unistd.h>3 #include <sys/syscall.h>4 5usingnamespace std;6 7int main()8{9int tid = syscall(SYS_gettid);
10 cout << tid <<...
简介处理大量并发任务时,一个请求对应一个线程来处理任务,线程的创建和销毁将消耗过多的系统资源,并增加上下文切换代价。线程池技术通过在系统中预先创建一定数量的线程(通常和cpu核数相同),当任务到达时,从线程池中分配一个线程进行处理,线程在处理完任务之后不用销毁,等待重用。线程池包括半同步半异步和领导者追随者两种实现方式。线程池包括三部分,第一层是同步服务层,它处理来自上层的任务请求。第二层是同步队列层...
http://www.cnblogs.com/lidabo/p/3328402.html 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服...
多线程库C++11中提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。 多线程库对应的头文件是#include <thread>,类名为std::thread。串行程序:#include <iostream>
#include <thread>void function_1()
{std::cout << "I‘m function_1()" << std::endl;
}int main()
{function_1();return0;
} 这是一个典型的单线程的单进程程序,任何程序都是一个进程,main()函数就是其中的主线程,...
多线程编程之信号量 Pthread是 POSIX threads 的简称。是POSIX的线程标准。 相互排斥量用来处理一个共享资源的同步訪问问题,当有多个共享资源时,就须要用到信号量机制。 信号量机制用于保证两个或多个共享资源被线程协调地同步使用。信号量的值相应当前可用资源的数量。 1.信号量(samaphore): 信号量机制通过信号量的值控制可用资源的数量。线程訪问共享资源前,须要申请获取一个信号量,假...
多线程 std::call_once的应用std::call_once的应用:类成员的延迟初始化,并只初始化一次。和static的作用很像,都要求是线程安全的,c++11之前在多线程的环境下,static好像不是线程安全的,c++11开始,static是线程安全的了。注意:即使某一个特定的线程里,多次调用了std::call_once,实际的效果是std::call_once里的函数也只被执行一次。例子:模仿建立数据库的连接,只有在放生send_data或者receive_data的时候,才去连接数据...
看完了APUE第三版的Chapter11 Threads,跟着书上的demo走了一遍,并且参考了这个blog(http://www.cnblogs.com/chuyuhuashi/p/4447817.html)的非常好的example。下面的内容就是看书过程中记录的,可以作为一个参考,但决不能代替看APUE原著。本来想在自己的mac上跑(毕竟也叫unix系统),后来发现mac上有些pthread的库支持的不全(比如,没有barrier),就改到了centos server上跑。(一)Thread Identification 1. 线程的id只...
#include <iostream>
#include <pthread.h> //多线程相关操作头文件,可移植众多平台usingnamespace std;struct mypara
{ int para1; //参数1 char *para2; //参数2 pthread_t wait;
};void* thread1( void* args ) //本函数演示的是数据的传出{mypara *my = (mypara *)args;srand(unsigned(time(0)));my->para1 = rand()%100;my->para2 = "。";cout << "给结构体赋值结束"<< endl;return...
http线程池的主要用途是异步处理使用无状态短连接的http请求,在传输层通信基于tcp协议和应用层基于http协议的基础上,达到c++服务器与web服务器通信的目的。设计上:(1)服务器启动时,初始化配置数量的线程(形成被动连接线程池)。每个线程会生成epoll描述符。(2)主线程生成监听socket,绑定端口。生成epoll描述符,注册监听socket,非阻塞接收(限定最大时间,如2s)新连接到连接队列。(2)投放主线程连接队列中的新连接到...