chore(util): remove dead file
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
0cd8e3e76b
commit
7ab321f568
1 changed files with 0 additions and 60 deletions
|
@ -1,60 +0,0 @@
|
|||
/*
|
||||
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
||||
Released under Apache 2.0 license as described in the file LICENSE.
|
||||
|
||||
Author: Leonardo de Moura
|
||||
*/
|
||||
#pragma once
|
||||
#include "util/thread.h"
|
||||
|
||||
namespace lean {
|
||||
/**
|
||||
\brief Auxiliary class that wraps a pointer to a type that has a
|
||||
set_interrupt method. The set_interrupt can be invoked from a different
|
||||
execution thread. To prevent race conditions, we use mutex whenever we
|
||||
reset the pointer, or invoke the set_interrupt method.
|
||||
|
||||
The common usage scenario is:
|
||||
1) Thread A creates creates a new object Obj and invokes set(Obj)
|
||||
2) Thread B invokes set_interrupt, which invokes Obj->set_interrupt
|
||||
3) Thread A invokes set(nullptr) before deleting Obj.
|
||||
|
||||
We use the mutex to avoid a race condition in 2&3.
|
||||
*/
|
||||
template<typename T>
|
||||
class interruptable_ptr {
|
||||
T * m_ptr;
|
||||
mutex m_mutex;
|
||||
public:
|
||||
interruptable_ptr():m_ptr(nullptr) {}
|
||||
|
||||
T * set(T * ptr) {
|
||||
lock_guard<mutex> lock(m_mutex);
|
||||
T * old = m_ptr;
|
||||
m_ptr = ptr;
|
||||
return old;
|
||||
}
|
||||
|
||||
void set_interrupt(bool flag) {
|
||||
lock_guard<mutex> lock(m_mutex);
|
||||
if (m_ptr)
|
||||
m_ptr->set_interrupt(flag);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
\brief Auxiliary class for setting/resetting a interruptable_ptr.
|
||||
*/
|
||||
template<typename T>
|
||||
struct scoped_set_interruptable_ptr {
|
||||
interruptable_ptr<T> & m_ptr;
|
||||
T * m_old_p;
|
||||
public:
|
||||
scoped_set_interruptable_ptr(interruptable_ptr<T> & ptr, T * p):m_ptr(ptr) {
|
||||
m_old_p = m_ptr.set(p);
|
||||
}
|
||||
~scoped_set_interruptable_ptr() {
|
||||
m_ptr.set(m_old_p);
|
||||
}
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue