Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Python by (45.3k points)

Check following codes first:

class DemoClass():

    def __init__(self):

        #### I really want to know if self.Counter is thread-safe. 

        self.Counter = 0

    def Increase(self):

        self.Counter = self.Counter + 1

    def Decrease(self):

        self.Counter = self.Counter - 1

    def DoThis(self):

        while True:

            Do something

            if A happens:

                self.Increase()

            else:

                self.Decrease()

            time.sleep(randomSecs)

    def DoThat(self):

        while True:

            Do other things

            if B happens:

                self.Increase()

            else:

                self.Decrease()

            time.sleep(randomSecs)

    def ThreadSafeOrNot(self):

        InterestingThreadA = threading.Thread(target = self.DoThis, args = ())

        InterestingThreadA.start()

        InterestingThreadB = threading.Thread(target = self.DoThat, args = ())

        InterestingThreadB.start()

I'm facing the same situation as above. I really want to know if it's thread-safe for self.Counter, well if not, what options do I have? I can only think of threading.RLock() to lock this resource, any better idea?

1 Answer

0 votes
by (16.8k points)

What you can do basically is to use the following artifacts: 

  • Locks
  • RLocks
  • Semaphores
  • Conditions
  • Events 
  • Queues

Go ahead and check this blog out, it contains the as it is information that you seek: Laurent Luce's Blog

Related questions

0 votes
1 answer
0 votes
1 answer
asked Mar 8, 2021 in Java by dante07 (13.1k points)
0 votes
1 answer
0 votes
1 answer
asked Mar 22, 2021 in Java by dante07 (13.1k points)

Browse Categories

...