自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

FileZilla 源代碼分析3

系統(tǒng) Linux
FileZilla是一個(gè)免費(fèi)開(kāi)源的FTP客戶(hù)端軟件,分為客戶(hù)端版本和服務(wù)器版本,具備所有的FTP軟件功能??煽匦?、有條理的界面和管理多站點(diǎn)的簡(jiǎn)化方式使得Filezilla客戶(hù)端版成為一個(gè)方便高效的FTP客戶(hù)端工具,而FileZilla Server則是一個(gè)小巧并且可靠的支持FTP&SFTP的FTP服務(wù)器軟件。

FileZilla是一種快速、可信賴(lài)的FTP客戶(hù)端以及服務(wù)器端開(kāi)放源代碼程式,具有多種特色、直覺(jué)的接口。本文就給大家分析下FileZilla的源代碼。

  < type="text/javascript"> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> < type="text/javascript"> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">

  win32同步控制機(jī)制(Synchronization)回顧

  1、Critical Sections(關(guān)鍵域)

  最簡(jiǎn)單的一種同步機(jī)制,創(chuàng)建和銷(xiāo)毀的函數(shù)是:

  InitializeCriticalSection()

  DeleteCriticalSection()

  在被創(chuàng)建后,使用如下函數(shù)實(shí)現(xiàn)線(xiàn)程同步,

  EnterCritSection()

  ... 需要同步的代碼

  LeaveCritSection()

  即在同一時(shí)間內(nèi),EnterCritSection和LeaveCritSection中間的代碼只能被一個(gè)線(xiàn)程處理。注意的問(wèn)題是:

  Critical Sections類(lèi)型的變量并不是一個(gè)核心對(duì)象,即沒(méi)有handle;

  它存在于進(jìn)程的內(nèi)存空間中,即不可跨進(jìn)程使用;

  可能會(huì)導(dǎo)致死鎖;

  2、Mutexes(互斥器)

  創(chuàng)建和銷(xiāo)毀的函數(shù)是:

  CreateMutex()

  CloseHandle()

  如果Mutex已經(jīng)被創(chuàng)建,這樣打開(kāi)和關(guān)閉:

  OpenMutex()

  ReleaseMutex()

  使用的時(shí)候,用wait函數(shù)來(lái)等待Mutex,一旦沒(méi)有線(xiàn)程擁有這個(gè)Mutex,這個(gè)線(xiàn)程就會(huì)獲得這個(gè)Mutex,在這個(gè)線(xiàn)程處理完以后,調(diào)用ReleaseMutex()可以釋放這個(gè)Mutex,其它等待中的線(xiàn)程就會(huì)重新競(jìng)爭(zhēng)這個(gè)Mutex,同時(shí)只能有一個(gè)線(xiàn)程獲得這個(gè)Mutex,沒(méi)競(jìng)爭(zhēng)到的線(xiàn)程則處于blocking阻塞狀態(tài)。常見(jiàn)的wait函數(shù)有:

  WaitForSingleObject() // 等待一個(gè)mutex

  WaitForMultipleObjects() // 同時(shí)等待多個(gè)mutex,要不同時(shí)擁有多個(gè),要不一個(gè)也沒(méi)有

  和Critical Sections相比,mutex是一個(gè)核心對(duì)象,因此是跨進(jìn)程的,即多個(gè)進(jìn)程可以使用同一個(gè)mutex,并且CreateMutex()的開(kāi)銷(xiāo)比InitializeCriticalSection()要大得多。

  相比而言,mutex更重量級(jí),更慢,但也更靈活。

  3、信號(hào)量(Semaphores)

  創(chuàng)建和銷(xiāo)毀的函數(shù)是:

  CreateSemaphore()

  CloseHandle()

  獲取這個(gè)Semaphore的函數(shù)同樣是那些wait函數(shù)WaitForSingleObject(), WaitForMultipleObjects()等等。

  使用Semaphores的含義是:Semaphores可以同時(shí)被多個(gè)線(xiàn)程擁有,但在CreateSemaphore()時(shí)會(huì)指定一個(gè)同時(shí)擁有這個(gè)Semaphore的***線(xiàn)程數(shù),即每個(gè)線(xiàn)程調(diào)用wait函數(shù)獲取Semaphore時(shí),Semaphore內(nèi)部的可用值就會(huì)減1,一旦可用值為0,則線(xiàn)程必須等待。當(dāng)擁到Semaphore的線(xiàn)程運(yùn)行完后,也應(yīng)該調(diào)用ReleaseSemaphore()來(lái)釋放。

  同Mutexes不一樣的是,調(diào)用ReleaseSemaphore()的線(xiàn)程并一定是調(diào)用wait并獲得擁有權(quán)的那個(gè)線(xiàn)程,即任何線(xiàn)程都可以在任何時(shí)間調(diào)用ReleaseSemaphore()來(lái)解除被任何線(xiàn)程鎖定的Semaphore。

  在某種意義上,Mutexes可以看成是Semaphore的一個(gè)特例,即只能同時(shí)被一個(gè)線(xiàn)程鎖定的Semaphore。

  Semaphore也是核心對(duì)象。

  4、事件(Event Objects)

  win32中最靈活的應(yīng)該是events了,它也是一種核心對(duì)象。

  events的含義在于:events有兩種狀態(tài),激活和非激活,在events被激活時(shí),那些等待著的線(xiàn)程會(huì)被喚醒。

  創(chuàng)建和銷(xiāo)毀的函數(shù)是:

  CreateEvent(),創(chuàng)建時(shí)可以指定events是manual或automatic,manual的含義是events的狀態(tài)是由程序員設(shè)定的。automatic的含義是events變成激話(huà)后,立即自動(dòng)變成非激活。

  CloseHandle()

  獲取這個(gè)events的函數(shù)同樣是那些wait函數(shù)WaitForSingleObject(), WaitForMultipleObjects()等等。

  下面三個(gè)方法可以改變events的狀態(tài):

  SetEvent(): 把events設(shè)為激活

  ResetEvent(): 把events設(shè)為非激活

  PulseEvent(): 激活events,然后立即高為非激活。如果events是manual的,則喚醒所有等待的線(xiàn)程,如果events是automatic的,同喚醒“一個(gè)”等待的線(xiàn)程。

  注意,如果event是manual時(shí),這時(shí)調(diào)用SetEvent后,如果不調(diào)用ResetEvent,則等待中的線(xiàn)程會(huì)被不斷的喚醒,即不斷地執(zhí)行CreateThread時(shí)指定的lpStartAddress方法。

  還有一點(diǎn),windows系統(tǒng)可以保證被喚醒的線(xiàn)程是一個(gè)接著一個(gè)的,即不會(huì)有的線(xiàn)程總是被喚醒,而有些線(xiàn)程被餓死。

  < type="text/javascript"> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">

通過(guò)文章完整的描述,大家應(yīng)該知道了FileZilla 源代碼,希望對(duì)大家有幫助!

【編輯推薦】

  1. FileZilla 源代碼分析1
  2. FileZilla 源代碼分析2
  3. FileZilla簡(jiǎn)單介紹
  4. FileZilla:免費(fèi)的服務(wù)器軟件
  5. FileZilla 3.3.1.0新版升級(jí) 修復(fù)bug
  6. FileZilla FTP 客戶(hù)端硬編碼的密碼索引關(guān)鍵漏洞
  7. FileZilla Server
責(zé)任編輯:趙鵬 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-02-23 15:26:01

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:39:27

FileZilla

2011-02-23 14:16:43

FileZilla

2011-03-01 16:25:37

FileZilla

2011-03-01 16:32:58

FileZilla

2011-03-01 16:01:08

FileZilla

2011-03-01 16:19:27

FileZilla

2015-08-28 09:38:51

Linux源代碼分析工具

2018-05-25 14:16:55

NFS源代碼線(xiàn)程

2015-08-26 17:38:47

Linux源代碼

2009-07-02 13:59:35

JSP后臺(tái)

2011-08-24 15:42:38

LUA源代碼

2020-02-24 09:25:33

代碼開(kāi)發(fā)工具

2021-10-01 12:17:30

Facebook開(kāi)源工具Mariana Tre
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)