簡體   English   中英

多線程-使用鎖在兩個線程之間交替

[英]Multithreading - Alternate between two threads using locks

我正在嘗試編寫一個程序,希望使用該程序在兩個線程thread1和thread2之間交替。 棘手的部分是,我要確保應該開始執行的第一個線程是thread1。 這是我到目前為止的代碼,但是它總是使我拋出運行時異常。

lock1.release()錯誤:釋放解鎖的鎖

但是,在我看來,lock1並不是正在釋放的解鎖鎖!

這是我到目前為止的代碼

class Client: 
    #member variables
   def sendFile(self,lock1,lock2):
        sent = 0
        while (i<self.size):

            if(sent!=0):
                lock2.acquire()
            BadNet.transmit(self.clientSocket,message,self.serverIP,self.serverPort)
            lock1.release()
            sent+=1

        self.clientSocket.close()

    def receiveAck(self,lock1,lock2):
        print "\n Entered ack !"
        lock1.acquire()
        ack, serverAddress = self.clientSocket.recvfrom(self.buf)
        lock2.release()



if __name__ == "__main__":
    lock1 = Lock()
    lock2 = Lock()
    client = Client();
    client.readFile();
    thread1 = Thread(target = client.sendFile, args=[lock1,lock2])
    thread2 = Thread(target = client.receiveAck, args=[lock1,lock2])
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()

之所以收到該錯誤,是因為您有一個線程正在嘗試釋放未獲得的鎖。 鎖特定於線程。 也就是說,如果線程1獲得了鎖,那么線程1必須釋放它。 如果線程1獲取了一個鎖,而線程2試圖釋放它,則線程2將得到一個錯誤。

如果線程未獲得鎖,則該線程無法釋放該鎖。

您正在嘗試將鎖用於它們不想要的東西。 鎖用於互斥,而不是消息傳遞。 如果要通知線程發生了某些事情,請使用事件對象條件對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM