GVKun编程网logo

Linux下AutoResetEvent的C ++等效项是什么?

20

本文将为您提供关于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 ++等效项是什么?

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等效项是什么?

$ {document).ready()的非jQuery等效项是什么?

什么是非jQuery等效项$(document).ready()

.NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?

.NET 中的 ManualResetEvent 和 AutoResetEvent 有什么区别?

我已经阅读了这方面的文档,我想我明白了。AutoResetEvent当代码通过时,An会重置event.WaitOne(),但
aManualResetEvent不会。

它是否正确?

答案1

小编典典

是的。这就像收费站和门之间的区别。是门ManualResetEvent,需要手动关闭(重置)。这AutoResetEvent是一个收费站,允许一辆车经过并在下一辆车通过之前自动关闭。

.NET中的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等效项

.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等效项的相关信息,可以在本站进行搜索。

本文标签: