03 2014 档案

摘要:一两种方式创建,一种为自动重置,在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象自动又变为无信号状态,一种为人工重置在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象状态不变。例如有多个线程都在等待一个线程运行结束,我们就可以使用人工重置事件,在被等待的线程结束时设置该事件为有信号状态,这样其他的多个线程对该事件的等待都会成功(因为该事件的状态不会被自动重置)。事件相关的API如下:创建事件对象:HANDLECreateEvent(LPSECURITY_ATTRIBUTESlpEventAttributes,//安全 阅读全文
posted @ 2014-03-17 14:49 linux--lgz 阅读(200) 评论(0) 推荐(0)
摘要:现在我们回过头来讲WaitForSingleObject这个函数,从前面的例子中我们看到WaitForSingleObject这个函数将等待一个对象变为有信号状态,那么具有信号状态的对象有哪些呢?下面是一部分:MutexEventSemaphoreJobProcessThreadWaitabletimerConsoleinput互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleO 阅读全文
posted @ 2014-03-17 14:48 linux--lgz 阅读(286) 评论(0) 推荐(0)
摘要:由于进程/线程间的操作是并行进行的,所以就产生了一个数据的问题同步,我们先看一段代码:intiCounter=0;//全局变量DOWRDthreadA(void*pD){for(inti=0;im_hThread;hThread[1]=pT2->m_hThread;hThread[2]=pT3->m_hThread;//等待线程结束//至于WaitForMultipleObjects的用法后面会讲到。WaitForMultipleObjects(3,hThread,TRUE,INFINITE);//删除临界区DeleteCriticalSection(&criCounter 阅读全文
posted @ 2014-03-17 14:42 linux--lgz 阅读(4281) 评论(0) 推荐(0)
摘要:等待线程 1。使用pthread_cond_wait前要先加锁 2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活 3。pthread_cond_wait被激活后会再自动加锁激活线程: 1。加锁(和等待线程用同一个锁) 2。pthread_cond_signal发送信号 3。解锁 激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。 程序示例: #include #include #include pthread_mutex_t count_lock; pthread_cond_t count_nonz... 阅读全文
posted @ 2014-03-16 13:15 linux--lgz 阅读(743) 评论(0) 推荐(0)
摘要:互斥锁和条件变量是出自Posix线程标准,用来同步一个进程中各个线程的,同时也可以用来同步几个进程间的,不过这需要此互斥锁和条件变量是存放在多个进程间共享的某个内存区的。互斥锁上锁与解锁: #include int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex);互斥锁初始化的问题:可以通过两种方式初始化一个互斥锁变量:1,如果互斥锁变量是... 阅读全文
posted @ 2014-03-16 13:08 linux--lgz 阅读(620) 评论(0) 推荐(0)