成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FileZilla FTP服務(wù)器源代碼分析(5)

系統(tǒng) Windows
FileZilla FTP服務(wù)器源代碼分析:FileZilla是一款免費(fèi)而且開源的FTP工具。包括FileZilla Client,F(xiàn)ileZilla Server兩個(gè)版本。FileZilla Server只提供了windows系統(tǒng)下的版本,我們要將本地的網(wǎng)站網(wǎng)頁文件上傳到網(wǎng)站服務(wù)器,或從服務(wù)器下載網(wǎng)頁文件,只需FileZilla Client客戶端版本就可以了。FileZilla FTP服務(wù)器源代碼分析

  FileZilla FTP服務(wù)器源代碼分析:FileZilla是一款免費(fèi)而且開源的FTP工具。包括FileZilla Client,F(xiàn)ileZilla Server兩個(gè)版本。FileZilla Server只提供了windows系統(tǒng)下的版本,我們要將本地的網(wǎng)站網(wǎng)頁文件上傳到網(wǎng)站服務(wù)器,或從服務(wù)器下載網(wǎng)頁文件,只需FileZilla Client客戶端版本就可以了。FileZilla FTP服務(wù)器源代碼分析

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

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

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

  1.   InitializeCriticalSection()  
  2.  
  3.   DeleteCriticalSection()  
  4.  

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

  1.   EnterCritSection()  
  2.  

  ... 需要同步的代碼

  1.   LeaveCritSection()  
  2.  

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

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

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

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

  2、Mutexes(互斥器)

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

  1.   CreateMutex()  
  2.  
  3.   CloseHandle()  
  4.  

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

  1.   OpenMutex()  
  2.  
  3.   ReleaseMutex()  
  4.  

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

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

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

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

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

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

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

  CreateSemaphore()

  CloseHandle()

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

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

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

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

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

  4、事件(Event Objects)

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

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

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

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

  CloseHandle()

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

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

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

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

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

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

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

【編輯推薦】

  1. FileZilla FTP服務(wù)器源代碼分析(1)
  2. FileZilla FTP服務(wù)器源代碼分析(2)
  3. FileZilla FTP服務(wù)器源代碼分析(4)
  4. FileZilla FTP服務(wù)器源代碼分析(5)
責(zé)任編輯:zhaolei 來源: CSDN網(wǎng)
相關(guān)推薦

2011-03-01 16:01:08

FileZilla

2011-03-01 16:19:27

FileZilla

2011-03-01 16:25:37

FileZilla

2011-02-23 14:46:21

FileZilla

2011-03-07 13:36:16

2011-02-23 14:54:58

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:39:27

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:26:01

FileZilla

2021-11-01 07:15:36

服務(wù)器FTPFileZilla

2011-01-11 13:12:48

FileZill服務(wù)器軟件FTP工具

2011-03-02 09:00:26

2011-03-07 17:04:02

ProftpdFTP

2010-07-01 14:22:02

配置FTP服務(wù)器

2011-03-02 16:46:35

FileZillaFtpAnywhere
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 午夜在线观看视频 | 国产精品久久久久久久一区探花 | 毛片一级黄色 | 亚洲精品久久久久久久久久吃药 | 中文字幕加勒比 | 日韩国产专区 | 午夜精品久久久久久久久久久久 | 欧美精品在线一区 | 欧美成人精品激情在线观看 | 天天躁天天操 | 国产高清亚洲 | 国产乱精品一区二区三区 | 黑人巨大精品欧美一区二区一视频 | 日韩综合网 | 久久国产成人精品国产成人亚洲 | 午夜在线精品 | 超碰日本| 免费在线播放黄色 | 欧美精品成人一区二区三区四区 | 欧美一区二区免费视频 | 久久精品综合网 | 久久高清 | 国产香蕉视频在线播放 | 亚洲高清视频在线 | 午夜影院| 最新中文字幕在线 | 久久小视频| 不卡一区二区三区四区 | 欧美一级片在线观看 | 伊人伊人伊人 | 超碰免费在线观看 | 一级毛片成人免费看a | 韩国av网站在线观看 | 视频在线观看亚洲 | 日韩成人免费av | 一区二区在线 | 一区二区三区中文 | 97精品国产手机 | 成人动漫视频网站 | 久久综合欧美 | 成人激情视频 |