Integrating legacy C code in multi-threaded C++ code -
assume have legacy c file functions solve linear equations , several corresponding global variables.
lineq.c:
/* macro definitions */ ... /* global vars */ ... /* functions make use of above variables */ void solvelineq(...); now want use legacy library in modern multi-threaded c++ application. therefore, want write kind of wrapper class lineqsolver provides oo interface solving linear equations , internally calls functions of our legacy c library.
however, should possible there multiple instances of lineqsolver used different threads. requires each instance/each thread has own copies of global variables in lineq.c. how can achieved, if don't want modify lineq.c?
a possible solution can imagine copy global variables , functions c file class lineqsolver, making them data , function members. then, each instance of lineqsolver operate on private copy of former globale variables. however, copy-paste programming style rather bad, when there update lineq.c , need copy-paste changes our code again.
what other possibilities have actual code solve linear equations stays in lineq.c , called lineqsolver?
you can use thread_local keyword c++11. work if function always initializes needed static variables in beginning.
if have more complex picture - more work needed. example:
int myvar1, myvar2; void initstaticvars() { .... } void solvelineq(...); if add thread_local specifier variables above , call initialization function @ beginning of program, initialize these variables calling thread. on other threads initial values zeroes.
Comments
Post a Comment