我在前一个问题上登出。 “...... Seg Fault, when using spind:string on an 嵌入式的六氯环己烷平台”,我在那里提出一些非常有用的建议。 我从那时起就停止了其他项目,最近又回到了研究这一问题。
我重申,我仅限于使用装甲交叉编印机(第2.95.2章),因为这是由嵌入平台的供应商提供和支持的。 我的理解是,这个问题之所以可能,是因为分界线非常老,而不是特别安全。
问题在于,每当我使用STL集装箱时,我最后会遇到分化问题。 除非我在集装箱申报单周围(如其他哨所)使用透镜_mutex_lock和广域操作者,否则以下代码将始终造成故障。
在我的申请中采用这种做法是不可行的,因为我把集装箱环绕到不同的方法和类别。 最好是解决这一问题,或找到合适的替代办法。 我尝试了STLPort和SGI标准模板图书馆,结果相同。 我只能假设,由于他们与旧的敌人有联系,他们不能解决问题。
是否有任何可能的建议或解决办法? 或者也许你可以建议把我可以引入我的守则的病媒(和扼杀)付诸实施?
事先得到任何指导。
#include <stdio.h>
#include <vector>
#include <list>
#include <string>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
class TestSeg
{
static pthread_mutex_t _logLock;
public:
TestSeg()
{
}
~TestSeg()
{
}
static void* TestThread( void *arg )
{
int i = 0;
while ( i++ < 10000 )
{
printf( "%d
", i );
WriteBad( "Function" );
}
pthread_exit( NULL );
}
static void WriteBad( const char* sFunction )
{
//pthread_mutex_lock( &_logLock );
//{
printf( "%s
", sFunction );
string sKiller; // <----------------------------------Bad
//list<char> killer; // <----------------------------------Bad
//vector<char> killer; // <----------------------------------Bad
//}
//pthread_mutex_unlock( &_logLock );
return;
}
void RunTest()
{
int threads = 100;
pthread_t _rx_thread[threads];
for ( int i = 0 ; i < threads ; i++ )
{
pthread_create( &_rx_thread[i], NULL, TestThread, NULL );
}
for ( int i = 0 ; i < threads ; i++ )
{
pthread_join( _rx_thread[i], NULL );
}
}
};
pthread_mutex_t TestSeg::_logLock = PTHREAD_MUTEX_INITIALIZER;
int main( int argc, char *argv[] )
{
TestSeg seg;
seg.RunTest();
pthread_exit( NULL );
}