Commit 705d6b82 authored by Pavel Vainerman's avatar Pavel Vainerman

Перешёл где можно от mutex к atomic.

parent c377d11b
......@@ -234,7 +234,7 @@
inline const std::string getProp(const std::string& name) { return UniSetTypes::conf->getProp(confnode, name); }
int smReadyTimeout; /*!< время ожидания готовности SM */
bool activated;
UniSetTypes::mutex_atomic_t activated;
int activateTimeout; /*!< время ожидания готовности UniSetObject к работе */
PassiveTimer ptStartUpTimeout; /*!< время на блокировку обработки WatchDog, если недавно был StartUp */
int askPause; /*!< пауза между неудачными попытками заказать датчики */
......@@ -350,10 +350,10 @@ bool <xsl:value-of select="$CLASSNAME"/>_SK::activateObject()
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
activated = false;
activated = 0;
<xsl:if test="normalize-space($BASECLASS)!=''"><xsl:value-of select="normalize-space($BASECLASS)"/>::activateObject();</xsl:if>
<xsl:if test="normalize-space($BASECLASS)=''">UniSetObject::activateObject();</xsl:if>
activated = true;
activated = 1;
}
return true;
......@@ -522,7 +522,7 @@ idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(0),
smReadyTimeout(0),
activated(false),
activated(0),
askPause(2000),
<xsl:for-each select="//variables/item">
<xsl:if test="normalize-space(@private)!=''">
......@@ -586,7 +586,7 @@ idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(cnode),
smReadyTimeout(0),
activated(false),
activated(0),
askPause(conf->getPIntProp(cnode,"askPause",2000)),
<xsl:for-each select="//variables/item">
<xsl:if test="normalize-space(@private)!=''">
......@@ -872,7 +872,7 @@ idLocalTestMode_S(DefaultObjectId),
idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(0),
activated(false),
activated(0),
askPause(2000)
{
ucrit &lt;&lt; "<xsl:value-of select="$CLASSNAME"/>: init failed!!!!!!!!!!!!!!!" &lt;&lt; endl;
......@@ -906,7 +906,7 @@ in_LocalTestMode_S(false),
idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(cnode),
activated(false),
activated(0),
askPause(conf->getPIntProp(cnode,"askPause",2000))
{
if( getId() == DefaultObjectId )
......
noinst_PROGRAMS = test test2
#test2
test_LDADD = $(top_builddir)/lib/libUniSet.la
test_CXXFLAGS = -I$(top_builddir)/include
test_LDADD = $(top_builddir)/lib/libUniSet.la $(COMCPP_LIBS)
test_CXXFLAGS = -I$(top_builddir)/include $(COMCPP_CGLAGS)
test_SOURCES = TestGen_SK.cc TestGen.cc TestGen-main.cc
test2_LDADD = $(top_builddir)/lib/libUniSet.la
test2_CXXFLAGS = -I$(top_builddir)/include
test2_LDADD = $(top_builddir)/lib/libUniSet.la $(COMCPP_LIBS)
test2_CXXFLAGS = -I$(top_builddir)/include $(COMCPP_CGLAGS)
test2_SOURCES = TestGenAlone_SK.cc TestGenAlone.cc TestGenAlone-main.cc
GENERATED=TestGen_SK.h TestGen_SK.cc TestGen-main.cc
......
......@@ -14,10 +14,10 @@ std::ostream& operator<<( std::ostream& os, IOControl::IOInfo& inf )
<< " card=" << inf.ncard << " channel=" << inf.channel << " subdev=" << inf.subdev
<< " aref=" << inf.aref << " range=" << inf.range
<< " default=" << inf.defval << " safety=" << inf.safety;
if( inf.cal.minRaw!=inf.cal.maxRaw )
os << inf.cal;
return os;
}
// -----------------------------------------------------------------------------
......@@ -43,7 +43,7 @@ IOControl::IOControl( UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
force(false),
force_out(false),
maxCardNum(10),
activated(false),
activated(0),
readconf_ok(false),
term(false),
testMode_as(UniSetTypes::DefaultObjectId),
......@@ -295,7 +295,7 @@ void IOControl::execute()
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
{
cout << myname << "(execute): wait activate..." << endl;
msleep(300);
if( activated )
......@@ -783,9 +783,9 @@ bool IOControl::activateObject()
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
activated = false;
activated = 0;
UniSetObject::activateObject();
activated = true;
activated = 1;
}
return true;
......@@ -1162,7 +1162,7 @@ void IOControl::sysCommand( const SystemMessage* sm )
{
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
{
dinfo << myname << "(sysCommand): wait activate..." << endl;
msleep(300);
if( activated )
......
......@@ -368,9 +368,9 @@ class IOControl:
int smReadyTimeout; /*!< время ожидания готовности SM к работе, мсек */
int defCardNum; /*!< номер карты по умолчанию */
int maxCardNum; /*! максимально разрешённый номер для карты */
UniSetTypes::uniset_mutex iopollMutex;
bool activated;
UniSetTypes::mutex_atomic_t activated;
bool readconf_ok;
int activateTimeout;
UniSetTypes::ObjectId sidTestSMReady;
......
......@@ -22,7 +22,7 @@ force_out(false),
mbregFromID(false),
sidExchangeMode(DefaultObjectId),
exchangeMode(emNone),
activated(false),
activated(0),
noQueryOptimization(false),
no_extimer(false),
prefix(prefix),
......@@ -221,14 +221,12 @@ void MBExchange::step()
// -----------------------------------------------------------------------------
bool MBExchange::checkProcActive()
{
uniset_rwmutex_rlock l(actMutex);
return activated;
}
// -----------------------------------------------------------------------------
void MBExchange::setProcActive( bool st )
{
uniset_rwmutex_wrlock l(actMutex);
activated = st;
activated = (st ? 1 : 0);
}
// -----------------------------------------------------------------------------
void MBExchange::sigterm( int signo )
......@@ -2406,15 +2404,15 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage *sm )
// см. activateObject()
msleep(initPause);
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
while( !checkProcActive() && !ptAct.checkTime() )
{
cout << myname << "(sysCommand): wait activate..." << endl;
msleep(300);
if( activated )
if( checkProcActive() )
break;
}
if( !activated )
if( !checkProcActive() )
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
{
UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
......@@ -2432,7 +2430,7 @@ void MBExchange::sysCommand( const UniSetTypes::SystemMessage *sm )
case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify);
break;
case SystemMessage::WatchDog:
{
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
......@@ -2695,7 +2693,7 @@ void MBExchange::poll()
if( d->resp_real )
allNotRespond = false;
if( it==d->regmap.end() )
break;
......@@ -2724,7 +2722,7 @@ void MBExchange::poll()
// update SharedMemory...
updateSM();
// check thresholds
for( MBExchange::RTUDeviceMap::iterator it1=rmap.begin(); it1!=rmap.end(); ++it1 )
{
......
......@@ -248,7 +248,7 @@ class MBExchange:
bool checkUpdateSM( bool wrFunc, long devMode );
bool checkPoll( bool wrFunc );
bool checkProcActive();
void setProcActive( bool st );
void waitSMReady();
......@@ -298,20 +298,19 @@ class MBExchange:
IOController::IOStateList::iterator itExchangeMode;
long exchangeMode; /*!< режим работы см. ExchangeMode */
UniSetTypes::uniset_rwmutex actMutex;
bool activated;
UniSetTypes::mutex_atomic_t activated;
int activateTimeout;
bool noQueryOptimization;
bool no_extimer;
std::string prefix;
timeout_t stat_time; /*!< время сбора статистики обмена */
int poll_count;
PassiveTimer ptStatistic; /*!< таймер для сбора статистики обмена */
std::string prop_prefix; /*!< префикс для считывания параметров обмена */
ModbusClient* mb;
// определение timeout для соединения
......
......@@ -22,7 +22,7 @@ askcount_id(DefaultObjectId),
respond_id(DefaultObjectId),
respond_invert(false),
askCount(0),
activated(false),
activated(0),
activateTimeout(500),
pingOK(true),
force(false),
......@@ -549,7 +549,7 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage *sm )
msleep(initPause);
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
{
cout << myname << "(sysCommand): wait activate..." << endl;
msleep(300);
if( activated )
......@@ -557,9 +557,9 @@ void MBSlave::sysCommand( const UniSetTypes::SystemMessage *sm )
}
if( !activated )
{
{
dcrit << myname << "(sysCommand): ************* don`t activate?! ************" << endl;
}
}
else
{
UniSetTypes::uniset_rwmutex_rlock l(mutex_start);
......@@ -699,11 +699,11 @@ bool MBSlave::activateObject()
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
activated = false;
activated = 0;
UniSetTypes::uniset_rwmutex_wrlock l(mutex_start);
UniSetObject_LT::activateObject();
initIterators();
activated = true;
activated = 1;
}
return true;
......@@ -711,8 +711,8 @@ bool MBSlave::activateObject()
// ------------------------------------------------------------------------------------------
void MBSlave::sigterm( int signo )
{
cerr << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = false;
dinfo << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = 0;
try
{
if( mbslot )
......
......@@ -188,8 +188,8 @@ class MBSlave:
long askCount;
typedef std::map<ModbusRTU::mbErrCode,unsigned int> ExchangeErrorMap;
ExchangeErrorMap errmap; /*!< статистика обмена */
bool activated;
UniSetTypes::mutex_atomic_t activated;
int activateTimeout;
bool pingOK;
timeout_t wait_msec;
......@@ -200,7 +200,7 @@ class MBSlave:
typedef std::map<int,std::string> FileList;
FileList flist;
std::string prefix;
ModbusRTU::ModbusData buf[ModbusRTU::MAXLENPACKET/2+1]; /*!< буфер для формирования ответов */
// данные для ответа на запрос 0x2B(43)/0x0E(14)
......
......@@ -11,7 +11,7 @@ UNetExchange::UNetExchange( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId s
UniSetObject_LT(objId),
shm(0),
initPause(0),
activated(false),
activated(0),
no_sender(false),
sender(0),
sender2(0)
......@@ -473,7 +473,7 @@ void UNetExchange::sysCommand( const UniSetTypes::SystemMessage *sm )
msleep(initPause);
PassiveTimer ptAct(activateTimeout);
while( !activated && !ptAct.checkTime() )
{
{
cout << myname << "(sysCommand): wait activate..." << endl;
msleep(300);
if( activated )
......@@ -576,11 +576,11 @@ bool UNetExchange::activateObject()
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
activated = false;
activated = 0;
UniSetTypes::uniset_rwmutex_wrlock l(mutex_start);
UniSetObject_LT::activateObject();
initIterators();
activated = true;
activated = 1;
}
return true;
......@@ -589,7 +589,7 @@ bool UNetExchange::activateObject()
void UNetExchange::sigterm( int signo )
{
dinfo << myname << ": ********* SIGTERM(" << signo <<") ********" << endl;
activated = false;
activated = 0;
for( ReceiverList::iterator it=recvlist.begin(); it!=recvlist.end(); ++it )
{
try
......
......@@ -134,7 +134,7 @@ class UNetExchange:
int steptime; /*!< периодичность вызова step, [мсек] */
bool activated;
UniSetTypes::mutex_atomic_t activated;
int activateTimeout;
struct ReceiverInfo
......
......@@ -31,7 +31,7 @@ lostPackets(0),
sidRespond(UniSetTypes::DefaultObjectId),
respondInvert(false),
sidLostPackets(UniSetTypes::DefaultObjectId),
activated(false),
activated(0),
r_thr(0),
u_thr(0),
pnum(0),
......@@ -160,7 +160,7 @@ void UNetReceiver::start()
{
if( !activated )
{
activated = true;
activated = 1;
u_thr->start();
r_thr->start();
}
......@@ -348,10 +348,7 @@ void UNetReceiver::real_update()
// -----------------------------------------------------------------------------
void UNetReceiver::stop()
{
activated = false;
// msleep(10);
// u_thr->stop();
// r_thr->stop();
activated = 0;
}
// -----------------------------------------------------------------------------
void UNetReceiver::receive()
......
......@@ -130,8 +130,8 @@ class UNetReceiver
UniSetTypes::ObjectId sidLostPackets;
IOController::IOStateList::iterator itLostPackets;
bool activated;
UniSetTypes::mutex_atomic_t activated;
ThreadCreator<UNetReceiver>* r_thr; // receive thread
ThreadCreator<UNetReceiver>* u_thr; // update thread
......
......@@ -15,7 +15,7 @@ s_fvalue(s_val),
shm(smi),
s_host(s_host),
sendpause(150),
activated(false),
activated(0),
dlist(100),
maxItem(0),
packetnum(1),
......@@ -195,7 +195,7 @@ void UNetSender::real_send()
// -----------------------------------------------------------------------------
void UNetSender::stop()
{
activated = false;
activated = 0;
// s_thr->stop();
}
// -----------------------------------------------------------------------------
......@@ -203,7 +203,7 @@ void UNetSender::start()
{
if( !activated )
{
activated = true;
activated = 1;
s_thr->start();
}
}
......
......@@ -86,8 +86,8 @@ class UNetSender
std::string myname;
int sendpause;
bool activated;
UniSetTypes::mutex_atomic_t activated;
UniSetTypes::uniset_rwmutex pack_mutex;
UniSetUDP::UDPMessage mypack;
DMap dlist;
......
......@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2014-01-24+04:00
// generate timestamp: 2014-01-27+04:00
// -----------------------------------------------------------------------------
#ifndef UObject_SK_H_
#define UObject_SK_H_
......@@ -119,7 +119,7 @@ class UObject_SK:
inline const std::string getProp(const std::string& name) { return UniSetTypes::conf->getProp(confnode, name); }
int smReadyTimeout; /*!< время ожидания готовности SM */
bool activated;
UniSetTypes::mutex_atomic_t activated;
int activateTimeout; /*!< время ожидания готовности UniSetObject к работе */
PassiveTimer ptStartUpTimeout; /*!< время на блокировку обработки WatchDog, если недавно был StartUp */
int askPause; /*!< пауза между неудачными попытками заказать датчики */
......
......@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2014-01-24+04:00
// generate timestamp: 2014-01-27+04:00
// -----------------------------------------------------------------------------
#include "Configuration.h"
#include "Exceptions.h"
......@@ -38,7 +38,7 @@ idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(0),
smReadyTimeout(0),
activated(false),
activated(0),
askPause(2000),
end_private(false)
......@@ -73,7 +73,7 @@ idHeartBeat(DefaultObjectId),
maxHeartBeat(10),
confnode(cnode),
smReadyTimeout(0),
activated(false),
activated(0),
askPause(conf->getPIntProp(cnode,"askPause",2000)),
end_private(false)
......@@ -297,9 +297,9 @@ bool UObject_SK::activateObject()
// пока не пройдёт инициализация датчиков
// см. sysCommand()
{
activated = false;
activated = 0;
UniSetObject::activateObject();
activated = true;
activated = 1;
}
return true;
......@@ -360,7 +360,7 @@ void UObject_SK::callback()
}
// обработка сообщений (таймеров и т.п.)
for( int i=0; i<20; i++ )
for( unsigned int i=0; i<20; i++ )
{
if( !receiveMessage(msg) )
break;
......
......@@ -2,11 +2,11 @@ noinst_PROGRAMS = smemory-test
smemory_test_LDADD = $(top_builddir)/lib/libUniSet.la \
$(top_builddir)/extensions/lib/libUniSetExtensions.la \
$(top_builddir)/extensions/SharedMemory/libUniSetSharedMemory.la \
$(SIGC_LIBS)
$(SIGC_LIBS) $(COMCPP_LIBS)
smemory_test_CPPFLAGS = -I$(top_builddir)/include \
-I$(top_builddir)/extensions/include \
-I$(top_builddir)/extensions/SharedMemory \
$(SIGC_CFLAGS)
$(SIGC_CFLAGS) $(COMCPP_CFLAGS)
smemory_test_SOURCES = TestProc_SK.cc TestProc.cc smemory-test.cc
TestProc_SK.cc: testproc.src.xml
......
......@@ -43,7 +43,7 @@ namespace UniSetTypes
{
public:
uniset_mutex();
uniset_mutex( std::string name );
uniset_mutex( const std::string& name );
~uniset_mutex();
bool isRelease();
......@@ -57,8 +57,8 @@ namespace UniSetTypes
private:
friend class uniset_mutex_lock;
uniset_mutex (const uniset_mutex& r);
const uniset_mutex &operator=(const uniset_mutex& r);
uniset_mutex (const uniset_mutex& r);
const uniset_mutex &operator=(const uniset_mutex& r);
omni_condition* cnd;
std::string nm;
omni_semaphore sem;
......@@ -85,7 +85,7 @@ namespace UniSetTypes
bool lock_ok();
private:
uniset_mutex* mutex;
uniset_mutex* mutex;
mutex_atomic_t mlock;
uniset_mutex_lock(const uniset_mutex_lock&);
uniset_mutex_lock& operator=(const uniset_mutex_lock&);
......@@ -110,7 +110,7 @@ namespace UniSetTypes
bool tryrlock();
bool trywrlock();
uniset_rwmutex (const uniset_rwmutex& r);
uniset_rwmutex( const uniset_rwmutex& r );
const uniset_rwmutex &operator=(const uniset_rwmutex& r);
inline std::string name(){ return nm; }
......@@ -121,7 +121,7 @@ namespace UniSetTypes
friend class uniset_rwmutex_lock;
ost::ThreadLock m;
ost::AtomicCounter wr_wait;
static int num;
static ost::AtomicCounter num;
};
std::ostream& operator<<(std::ostream& os, uniset_rwmutex& m );
......
......@@ -127,7 +127,7 @@ class ThrPassiveTimer:
public PassiveTimer
{
public:
ThrPassiveTimer();
~ThrPassiveTimer();
......@@ -136,7 +136,7 @@ class ThrPassiveTimer:
protected:
bool isTerminated();
void setTerminated( bool set );
private:
bool terminated;
omni_mutex* tmutex;
......
......@@ -77,7 +77,7 @@ ComPort::Speed ModbusRTUMaster::getSpeed()
{
if( port == NULL )
return ComPort::ComSpeed0;
return port->getSpeed();
}
// -------------------------------------------------------------------------
......@@ -103,7 +103,7 @@ int ModbusRTUMaster::getTimeout()
{
if( port == NULL )
return 0;
return port->getTimeout();
}
// -------------------------------------------------------------------------
......
......@@ -84,7 +84,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
if( nTransaction >= numeric_limits<ModbusRTU::ModbusData>::max() )
nTransaction = 0;
ModbusTCP::MBAPHeader mh;
mh.tID = ++nTransaction;
mh.pID = 0;
......
......@@ -106,9 +106,9 @@ using namespace UniSetTypes;
UniSetTypes::IDList::IDList():
node(UniSetTypes::conf->getLocalNode())
{
}
UniSetTypes::IDList::~IDList()
{
}
......@@ -120,11 +120,10 @@ using namespace UniSetTypes;
if( (*it) == id )
return;
}
lst.push_back(id);
}
void UniSetTypes::IDList::del( ObjectId id )
{
for( list<ObjectId>::iterator it=lst.begin(); it!=lst.end(); ++it )
......
......@@ -41,8 +41,8 @@ uniset_mutex::uniset_mutex():
cnd = new omni_condition(&mtx);
}
// -----------------------------------------------------------------------------
uniset_mutex::uniset_mutex( string name ):
cnd(0),
uniset_mutex::uniset_mutex( const string& name ):
cnd(0),
nm(name),
locked(0)
{
......@@ -63,7 +63,6 @@ void uniset_mutex::lock()
{
sem.wait();
locked = 1;
MUTEX_DEBUG(cerr << nm << " Locked.." << endl;)
}
// -----------------------------------------------------------------------------
......@@ -154,7 +153,7 @@ wr_wait(0)
}
int uniset_rwmutex::num = 0;
ost::AtomicCounter uniset_rwmutex::num = 0;
uniset_rwmutex::uniset_rwmutex():
nm(""),
......@@ -181,7 +180,7 @@ const uniset_rwmutex &uniset_rwmutex::operator=( const uniset_rwmutex& r )
nm = s.str();
unlock();
}
return *this;
}
......@@ -193,25 +192,25 @@ nm(r.nm)
void uniset_rwmutex::lock()
{
MUTEX_DEBUG(cerr << nm << " prepare Locked.." << endl;)
wr_wait += 1;
wr_wait +=1;
m.writeLock();
wr_wait -= 1;
wr_wait -=1;
MUTEX_DEBUG(cerr << nm << " Locked.." << endl;)
}
void uniset_rwmutex::wrlock()
{
MUTEX_DEBUG(cerr << nm << " prepare WRLocked.." << endl;)
wr_wait += 1;
wr_wait +=1;
m.writeLock();
wr_wait -= 1;
wr_wait -=1;
MUTEX_DEBUG(cerr << nm << " WRLocked.." << endl;)
}
void uniset_rwmutex::rlock()
{
MUTEX_DEBUG(cerr << nm << " prepare RLocked.." << endl;)
while( wr_wait > 0 )
msleep(2);
while( wr_wait )
msleep(2);
m.readLock();
MUTEX_DEBUG(cerr << nm << " RLocked.." << endl;)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment