本文将为您提供关于Linux下AutoResetEvent的C++等效项是什么?的详细介绍,同时,我们还将为您提供关于${document).ready()的非jQuery等效项是什么?、.NET中的
本文将为您提供关于Linux下AutoResetEvent的C ++等效项是什么?的详细介绍,同时,我们还将为您提供关于$ {document).ready()的非jQuery等效项是什么?、.NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?、.NET中的ManualResetEvent和AutoResetEvent有什么区别?、.NET的ManualResetEvent和WaitHandle的Java等效项的实用信息。
本文目录一览:- Linux下AutoResetEvent的C ++等效项是什么?
- $ {document).ready()的非jQuery等效项是什么?
- .NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?
- .NET中的ManualResetEvent和AutoResetEvent有什么区别?
- .NET的ManualResetEvent和WaitHandle的Java等效项
Linux下AutoResetEvent的C ++等效项是什么?
MSDN中AutoResetEvent的描述
我正在尝试将在C#中实现的线程池移植到Linux下的C ++。我不知道应该使用哪些行为与“ AutoResetEvent”类似的函数。
答案1
小编典典AutoResetEvent最类似于二进制信号量。人们说“条件变量”本身并没有错,但是条件变量用于类似的情况,而不是类似的对象。您可以在条件变量之上实现一个(未命名的)AutoResetEvent:
#include <pthread.h>#include <stdio.h>class AutoResetEvent{ public: explicit AutoResetEvent(bool initial = false); ~AutoResetEvent(); void Set(); void Reset(); bool WaitOne(); private: AutoResetEvent(const AutoResetEvent&); AutoResetEvent& operator=(const AutoResetEvent&); // non-copyable bool flag_; pthread_mutex_t protect_; pthread_cond_t signal_;};AutoResetEvent::AutoResetEvent(bool initial): flag_(initial){ pthread_mutex_init(&protect_, NULL); pthread_cond_init(&signal_, NULL);}void AutoResetEvent::Set(){ pthread_mutex_lock(&protect_); flag_ = true; pthread_mutex_unlock(&protect_); pthread_cond_signal(&signal_);}void AutoResetEvent::Reset(){ pthread_mutex_lock(&protect_); flag_ = false; pthread_mutex_unlock(&protect_);}bool AutoResetEvent::WaitOne(){ pthread_mutex_lock(&protect_); while( !flag_ ) // prevent spurious wakeups from doing harm pthread_cond_wait(&signal_, &protect_); flag_ = false; // waiting resets the flag pthread_mutex_unlock(&protect_); return true;}AutoResetEvent::~AutoResetEvent(){ pthread_mutex_destroy(&protect_); pthread_cond_destroy(&signal_);}AutoResetEvent event;void *otherthread(void *){ event.WaitOne(); printf("Hello from other thread!\n"); return NULL;}int main(){ pthread_t h; pthread_create(&h, NULL, &otherthread, NULL); printf("Hello from the first thread\n"); event.Set(); pthread_join(h, NULL); return 0;}
但是,如果您需要命名的自动重置事件,则可能需要查看信号量,并且可能很难翻译代码。无论哪种方式,我都会仔细查看平台上pthread的文档,条件变量和自动重置事件并不相同,并且行为也不相同。
$ {document).ready()的非jQuery等效项是什么?
什么是非jQuery等效项$(document).ready()
?
.NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?
我已经阅读了这方面的文档,我想我明白了。AutoResetEvent
当代码通过时,An会重置event.WaitOne()
,但
aManualResetEvent
不会。
它是否正确?
答案1
小编典典是的。这就像收费站和门之间的区别。是门ManualResetEvent
,需要手动关闭(重置)。这AutoResetEvent
是一个收费站,允许一辆车经过并在下一辆车通过之前自动关闭。
.NET中的ManualResetEvent和AutoResetEvent有什么区别?
我已阅读有关此文档,我想我明白了。 当代码通过event.WaitOne()
, AutoResetEvent
重置,但ManualResetEvent
则不会。
它是否正确?
#1楼
恩,那就对了。
您可以通过使用这两个来获得一个想法。
如果你需要告诉你已经完成了一些工作而其他(线程)等待这个现在可以继续,你应该使用ManualResetEvent。
如果您需要对任何资源进行互斥访问,则应使用AutoResetEvent。
#2楼
简短的回答是肯定的。 最重要的区别是AutoResetEvent只允许一个等待的线程继续。 另一方面,ManualResetEvent将继续允许线程(几个同时均匀)继续,直到你告诉它停止(重置它)。
#3楼
是。 这就像收费站和门之间的区别。 ManualResetEvent
是门,需要手动关闭(重置)。 AutoResetEvent
是一个收费站,允许一辆汽车经过并在下一辆汽车通过之前自动关闭。
#4楼
是。 这绝对是正确的。
您可以将ManualResetEvent视为指示状态的方式。 某些东西打开(设置)或关闭(重置)。 有一段时间的事件。 等待该状态发生的任何线程都可以继续。
AutoResetEvent与信号更具可比性。 一次性表明事情已经发生。 没有任何持续时间的事件。 通常但不一定发生的“某事”很小并且需要由单个线程处理 - 因此在单个线程消耗了事件之后自动重置。
#5楼
试想一下, AutoResetEvent
WaitOne()
和Reset()
作为单个原子操作执行。
.NET的ManualResetEvent和WaitHandle的Java等效项
我想知道Java是否提供了.NET的ManualResetEvent和WaitHandle类的等效类,因为我想编写代码,除非触发事件,否则它将在给定的超时时间内阻止。
据我所知,WaitHandle和ManualResetEvent的.NET类提供了一个不错的,无麻烦的接口,据我所知,该接口也是线程安全的,那么Java必须提供什么?
我们今天的关于Linux下AutoResetEvent的C ++等效项是什么?的分享就到这里,谢谢您的阅读,如果想了解更多关于$ {document).ready()的非jQuery等效项是什么?、.NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?、.NET中的ManualResetEvent和AutoResetEvent有什么区别?、.NET的ManualResetEvent和WaitHandle的Java等效项的相关信息,可以在本站进行搜索。
本文标签: