c++ - Threading: Do different class instances provide their own copy of their member function? -
here code:
class carl{ public: int x; carl(int y):x(y){ } void compute(){ x++; } }; int main () { carl c(5); //init carl c2(5); //init std::thread t1([&](){ for(int = 0 ; <50;i++) c.compute(); } ); std::thread t2([&](){ for(int = 0 ; <50;i++) c2.compute(); } ); t1.join(); //join t2.join(); //join std::cout<<c.x<<std::endl; std::cout<<c2.x<<std::endl; return 0; }
output
55 55
i aware of data races , if both threads accessing same resources, should guarded. if it's this. made 2 instances of carl
named c
, c2
, have own resources
. made 2 threads access own compute. questions are:
- since both threads strictly access own resources,is thread safe , locks aren't necessary?
- does mean compute function being accessed c , c2 have different function address?
bonus question: planning implement multiclient file transfer. tcp ip implemented using blocking i/o , 1 listener per every connection. feel using lock guards might slow down process since on queued. algorithm/approaches?
since both threads strictly access own resources,is thread safe , locks aren't necessary?
yes, correct.
does mean compute function being accessed c , c2 have different function address?
no. functions don't need copied, each function call independent. long data operate upon not shared across threads, have no problems.
Comments
Post a Comment