欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
將 Win32 C/C 應用程序遷移到 POWER 上的 Linux,第 2 部分: 互斥

2005 年 2 月 10 日
更新 2005 年 4 月 21 日

本系列文章可以幫助您將 Win32 C/C++ 應用程序移植到 POWER 上的 Linux。高級程序員 Nam Keung 和 pSeries? Linux 技術(shù)顧問(wèn) Chakarat Skawratananond 從互斥(mutex)應用程序接口(application program interface,API)的角度闡述了從 Win32 到 Linux 的映射。本系列的 第 1 部分 集中關(guān)注的是 Win32 API 的映射。

介紹

本文關(guān)注的是互斥原語(yǔ)(primitives)。建議您在繼續閱讀之前先回顧本系列 第 1 部分 中的下列章節:

  • 初始化
  • 進(jìn)程
  • 線(xiàn)程
  • 共享內存




回頁(yè)首


互斥

如下面的 表 1 所示,互斥提供線(xiàn)程間資源的獨占訪(fǎng)問(wèn)控制。 它是一個(gè)簡(jiǎn)單的鎖,只有持有它的線(xiàn)程才可以釋放那個(gè)互斥。它確保了它們正在訪(fǎng)問(wèn)的共享資源的完整性 (最常見(jiàn)的是共享數據),因為在同一時(shí)刻只允許一個(gè)線(xiàn)程訪(fǎng)問(wèn)它。


表 1. 互斥
Win32 Linux
CreateMutex(0, FALSE, 0); pthread_mutex_init(&mutex, NULL))
CloseHandle(mutex); pthread_mutex_destroy(&mutex)
WaitForSingleObject(mutex, INFINITE)) pthread_mutex_lock(&mutex)
ReleaseMutex(mutex); pthread_mutex_unlock(&mutex)




回頁(yè)首


創(chuàng )建互斥

在 Win NT/Win2K 中,所有互斥都是遞歸的。

在 Win32 中,CreateMutex() 為當前進(jìn)程中的線(xiàn)程提供資料的獨占訪(fǎng)問(wèn)控制。 此方法讓線(xiàn)程可以串行化對進(jìn)程內資源的訪(fǎng)問(wèn)。創(chuàng )建了互斥句柄(mutual exclusion handle)后, 當前進(jìn)程中的所有線(xiàn)程都可以使用它(見(jiàn)下面的 清單 1)。


清單 1. 創(chuàng )建互斥
HANDLE CreateMutex(                    LPSECURITY_ATTRIBUTES	lMutexAttributes,                    BOOL			lInitialOwner,                    LPCTSTR			lName                    )                    

Linux 使用 pthread 庫調用 pthread_mutex_init() 來(lái)創(chuàng )建互斥,如下面的 清單 2 所示。


清單 2. pthread
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);

Linux 有三種類(lèi)型的互斥?;コ忸?lèi)型決定了在 pthread_mutex_lock 中線(xiàn)程嘗試鎖定一個(gè)它已經(jīng)持有的互斥時(shí) 所發(fā)生的情形:

Fast mutex:
當嘗試使用 pthread_mutex_lock() 去鎖定互斥時(shí),進(jìn)行調用的線(xiàn)程會(huì )永遠掛起。
Recursive mutex:
pthread_mutex_lock() 立即返回成功返回代碼。
Error check mutex:
pthread_mutex_lock() 立即返回錯誤代碼 EDEADLK。

可以以?xún)煞N方式設置互斥的類(lèi)型。清單 3 介紹了設置互斥的靜態(tài)方法。


清單 3. 設置互斥的靜態(tài)方法
/* For Fast mutexes */                    pthread_mutex_t 	mutex = PTHREAD_MUTEX_INITIALIZER;                    /* For recursive mutexes */                    

您可以使用這個(gè)函數來(lái)鎖定互斥:pthread_mutex_lock(pthread_mutex_t *mutex)。 這個(gè)函數會(huì )獲得一個(gè)指向它正在嘗試鎖定的互斥的指針。當互斥被鎖定或者發(fā)生錯誤時(shí),函數返回。 那個(gè)錯誤不是歸咎于被鎖定的互斥。函數會(huì )等待互斥被解鎖。

設置互斥的另一種方式是使用互斥屬性對象。為此,要調用 pthread_mutexattr_init() 來(lái)初始化對象,然后調用 pthread_mutexattr_settype() 來(lái)設置互斥的類(lèi)型,如下面的 清單 4 所示。


清單 4. 通過(guò)屬性設置互斥
int pthread_mutexattr_init(pthread_mutexattr_t *attr);                    int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind);                    

使用下面的函數解開(kāi)對互斥的鎖定(見(jiàn) 清單 5):

這里是創(chuàng )建互斥的示例代碼(見(jiàn)下面的 67)。


清單 5. 解鎖函數
pthread_mutex_unlock(pthread_mutex_t *mutex))


清單 6. Win32 示例代碼

HANDLE mutex;                    mutex = CreateMutex(0, FALSE, 0);                    if (!(mutex))                    {                    return RC_OBJECT_NOT_CREATED;                    }                    


清單 7. 相應的 Linux 代碼

pthread_mutexattr_t  attr;                    pthread_mutex_t      mutex;                    pthread_mutexattr_init (&attr);                    if (rc = pthread_mutex_init(&mutex, &attr))                    {                    return RC_OBJECT_NOT_CREATED;                    }                    





回頁(yè)首


銷(xiāo)毀互斥

在 Win32 中,CloseHandle() 方法(見(jiàn) 清單 8) 可以刪除為當前進(jìn)程中資源提供獨占訪(fǎng)問(wèn)控制的對象。刪除那個(gè)對象后,那個(gè)互斥對象就會(huì )無(wú)效,直到 CloseHandle() 方法通過(guò)調用 CreateMutex 重新初始化它。

當不再對資源進(jìn)行獨占訪(fǎng)問(wèn)后,您應該調用這個(gè)方法銷(xiāo)毀它。如果您需要放棄那個(gè)對象的所有權,那么應該調用 ReleaseMutex() 方法。

在 Linux 中,pthread_mutex_destroy() 會(huì )銷(xiāo)毀互斥對象,這會(huì )釋放它可能會(huì ) 持有的資源。它還會(huì )檢查互斥在那個(gè)時(shí)刻是不是解除鎖定的(見(jiàn)清單 9)。


清單 8. Win32 示例代碼
if(WaitForSingleObject(mutex, (DWORD)0) == WAIT_TIMEOUT )                    return RC_NOT_OWNER;                    CloseHandle(mutex);                    


清單 9. Linux 代碼

if (pthread_mutex_destroy(&mutex) == EBUSY)                    return RC_NOT_OWNER;                    





回頁(yè)首


鎖定互斥

在 Win32 中,WaitForSingleObject()(見(jiàn) 清單 10) 會(huì )阻塞對當前進(jìn)程內資源的獨占訪(fǎng)問(wèn)的請求。進(jìn)程可以通過(guò)下面的方式阻塞請求:

  1. 如果獨占訪(fǎng)問(wèn)請求的資源沒(méi)有被鎖定,則這個(gè)方法鎖定它。
  2. 如果獨占訪(fǎng)問(wèn)的資源已經(jīng)被鎖定,則此方法阻塞那個(gè)調用線(xiàn)程,直到那個(gè)資源被解除鎖定。

Linux 使用 pthread_mutex_lock()(見(jiàn) 清單 11)。

您還可以使用 pthread_mutex_trylock() 來(lái)測試某個(gè)互斥是否已經(jīng)被鎖定,而不需要真正 地去鎖定它。如果另一個(gè)線(xiàn)程鎖定了那個(gè)互斥,則 pthread_mutex_trylock 將不會(huì )阻塞。 它會(huì )立即返回錯誤代碼 EBUSY。


清單 10. Win32 示例代碼
if ((rc = WaitForSingleObject(mutex, INFINITE)) == WAIT_FAILED)                    return RC_LOCK_ERROR;                    


清單 11. Linux 代碼

if (rc = pthread_mutex_lock(&mutex))                    return RC_LOCK_ERROR;                    





回頁(yè)首


釋放或者解鎖互斥

Win32 使用 ReleaseMutex()(見(jiàn) 清單 12) 來(lái)釋放對資源的獨占訪(fǎng)問(wèn)。如果進(jìn)行調用的線(xiàn)程并不擁有那個(gè)互斥對象,則這個(gè)調用可能會(huì )失敗。

Linux 使用 pthread_mutex_unlock() 來(lái)釋放或者解鎖互斥 (見(jiàn)清單 13)。


清單 12. Win32 示例代碼
If (! ReleaseMutex(mutex))                    {                    rc = GetLastError();                    return RC_UNLOCK_ERROR;                    }                    


清單 13. Linux 示例代碼

if (rc = pthread_mutex_unlock(&mutex))                    return RC_UNLOCK_ERROR;





回頁(yè)首


Mutex 示例代碼

這里是獲得進(jìn)程內互斥的 Win32 示例代碼(見(jiàn) Listing 14):


清單 14. Win32 示例代碼
#include <stdio.h>                    #include <stdlib.h>                    #include <windows.h>                    void  thrdproc  (void *data); //the thread procedure (function) to be executed                    HANDLE    mutex;                    int main( int argc, char **argv )                    {                    int        hThrd;                    unsigned   stacksize;                    HANDLE     *threadId1;                    HANDLE     *threadId2;                    int        arg1;                    DWORD	  rc;                    if( argc < 2 )                    arg1 = 7;                    else                    arg1 = atoi( argv[1] );                    printf( "Intra Process Mutex test.\n" );                    printf( "Start.\n" );                    mutex = CreateMutex(0, FALSE, 0);                    if (mutex==NULL)                    return RC_OBJECT_NOT_CREATED;                    printf( "Mutex created.\n" );                    if ((rc = WaitForSingleObject(mutex, INFINITE)) == WAIT_FAILED)                    return RC_LOCK_ERROR ;                    printf( "Mutex blocked.\n" );                    if( stacksize < 8192 )                    stacksize = 8192;                    else                    stacksize = (stacksize/4096+1)*4096;                    hThrd = _beginthread( thrdproc, // Definition of a thread entry                    NULL,                    stacksize,                    "Thread 1");                    if (hThrd == -1)                    return RC_THREAD_NOT_CREATED);                    *threadId1 = (HANDLE) hThrd;                    hThrd = _beginthread( thrdproc, // Definition of a thread entry                    NULL,                    stacksize,                    Thread 2");                    if (hThrd == -1)                    return RC_THREAD_NOT_CREATED);                    *threadId2 = (HANDLE) hThrd;                    printf( "Main thread sleeps 5 sec.\n" );                    Sleep( 5*1000 );                    if (! ReleaseMutex(mutex))                    {                    rc = GetLastError();                    return RC_UNLOCK_ERROR;                    }                    printf( "Mutex released.\n" );                    printf( "Main thread sleeps %d sec.\n", arg1 );                    Sleep( arg1 * 1000 );                    if( WaitForSingleObject(mutex, (DWORD)0) == WAIT_TIMEOUT )                    return RC_NOT_OWNER;                    CloseHandle(mutex);                    printf( "Mutex deleted. (%lx)\n", rc );                    printf( "Main thread sleeps 5 sec.\n" );                    Sleep( 5*1000 );                    printf( "Stop.\n" );                    return 0;                    }                    void thread_proc( void *pParam )                    {                    DWORD	rc;                    printf( "\t%s created.\n", pParam );                    if ((rc = WaitForSingleObject(mutex, INFINITE)) == WAIT_FAILED)                    return RC_LOCK_ERROR;                    printf( "\tMutex blocked by %s. (%lx)\n", pParam, rc );                    printf( "\t%s sleeps for 5 sec.\n", pParam );                    Sleep( 5* 1000 );                    if (! ReleaseMutex(mutex))                    {                    rc = GetLastError();                    return RC_UNLOCK_ERROR;                    }                    printf( "\tMutex released by %s. (%lx)\n", pParam, rc );                    }                    

相應的獲得進(jìn)程內互斥的 Linux 示例代碼(見(jiàn) 清單 15):


清單 15. 相應的 Linux 示例代碼
#include <stdio.h>                    #include <stdlib.h>                    #include <sys/types.h>                    #include <unistd.h>                    #include <pthread.h>                    void  thread_proc (void * data);                    pthread_mutexattr_t     attr;                    pthread_mutex_t 	  mutex;                    int main( int argc, char **argv )                    {                    pthread_attr_t               pthread_attr;                    pthread_attr_t               pthread_attr2;                    pthread_t	            threadId1;                    pthread_t                    threadId2;                    int	                    arg1;                    int	        	     rc = 0;                    if( argc < 2 )                    arg1 = 7;                    else                    arg1 = atoi( argv[1] );                    printf( "Intra Process Mutex test.\n" );                    printf( "Start.\n" );                    pthread_mutexattr_init( &attr );                    if ( rc = pthread_mutex_init( &mutex, NULL))                    {                    printf( "Mutex NOT created.\n" );                    return RC_OBJECT_NOT_CREATED;                    }                    printf( "Mutex created.\n" );                    if (rc = pthread_mutex_lock (&mutex))                    {                    printf( "Mutex LOCK ERROR.\n" );                    return RC_LOCK_ERROR;                    }                    printf( "Mutex blocked.\n" );                    if (rc = pthread_attr_init(&pthread_attr))                    {                    printf( "pthread_attr_init ERROR.\n" );                    return RC_THREAD_ATTR_ERROR;                    }                    if (rc = pthread_attr_setstacksize(&pthread_attr, 120*1024))                    {                    printf( "pthread_attr_setstacksize ERROR.\n" );                    return RC_STACKSIZE_ERROR;                    }                    if (rc = pthread_create(&threadId1,                    &pthread_attr,                    (void*(*)(void*))thread_proc,                    "Thread 1" ))                    {                    printf( "pthread_create ERROR.\n" );                    return RC_THREAD_NOT_CREATED;                    }                    if (rc = pthread_attr_init(&pthread_attr2))                    {                    printf( "pthread_attr_init2 ERROR.\n" );                    return RC_THREAD_ATTR_ERROR;                    }                    if (rc = pthread_attr_setstacksize(&pthread_attr2, 120*1024))                    {                    printf( "pthread_attr_setstacksize2 ERROR.\n" );                    return RC_STACKSIZE_ERROR;                    }                    if (rc = pthread_create(&threadId2,                    &pthread_attr2,                    (void*(*)(void*))thread_proc,                    "Thread 2" ))                    {                    printf( "pthread_CREATE ERROR2.\n" );                    return RC_THREAD_NOT_CREATED;                    }                    printf( "Main thread sleeps 5 sec.\n" );                    sleep (5);                    if (rc = pthread_mutex_unlock(&mutex))                    {                    printf( "pthread_mutex_unlock ERROR.\n" );                    return RC_UNLOCK_ERROR;                    }                    printf( "Mutex released.\n" );                    printf( "Main thread sleeps %d sec.\n", arg1 );                    sleep(arg1);                    pthread_mutex_destroy(&mutex);                    printf( "Main thread sleeps 5 sec.\n" );                    sleep( 5 );                    printf( "Stop.\n" );                    return 0;                    }                    void thread_proc( void *pParam )                    {                    int	nRet;                    printf( "\t%s created.\n", pParam );                    if (nRet = pthread_mutex_lock(&mutex))                    {                    printf( "thread_proc Mutex LOCK ERROR.\n" );                    return RC_LOCK_ERROR;                    }                    printf( "\tMutex blocked by %s. (%lx)\n", pParam, nRet );                    printf( "\t%s sleeps for 5 sec.\n", pParam );                    sleep(5);                    if (nRet = pthread_mutex_unlock(&mutex))                    {                    printf( " thread_proc :pthread_mutex_unlock ERROR.\n" );                    return RC_UNLOCK_ERROR;                    }                    printf( "\tMutex released by %s. (%lx)\n", pParam, nRet );                    }                    

這里是獲得進(jìn)程間互斥的另一 Win32 示例代碼。

互斥是系統范圍內對象,可以由多個(gè)進(jìn)程使用。如果程序 A 創(chuàng )建一個(gè)互斥,則程序 B 可以使用同一個(gè)互斥。 互斥有名稱(chēng),并且,一個(gè)給定名稱(chēng)的互斥在同一機器上同一時(shí)刻只能存在一個(gè)。如果您創(chuàng )建了一個(gè)名為“My Mutex” 的互斥,則任何其他程序都不能使用這個(gè)名稱(chēng)創(chuàng )建互斥,如下面的清單 1618 所示。


清單 16. Win32 進(jìn)程間互斥示例代碼 Process 1
#include <stdio.h>                    #include <windows.h>                    #define WAIT_FOR_ENTER  printf( "Press ENTER\n" );getchar()                    int main()                    {                    HANDLE	mutex;                    DWORD   rc;                    printf( "Inter Process Mutex test - Process 1.\n" );                    printf( "Start.\n" );                    SECURITY_ATTRIBUTES    sec_attr;                    sec_attr.nLength              = sizeof( SECURITY_ATTRIBUTES );                    sec_attr.lpSecurityDescriptor = NULL;                    sec_attr.bInheritHandle       = TRUE;                    mutex = CreateMutex(&sec_attr, FALSE, "My Mutex");                    if( mutex == (HANDLE) NULL )                    return RC_OBJECT_NOT_CREATED;                    printf( "Mutex created.\n" );                    WAIT_FOR_ENTER;                    if ( WaitForSingleObject(mutex, INFINITE) == WAIT_FAILED)                    return RC_LOCK_ERROR;                    printf( "Mutex blocked.\n" );                    WAIT_FOR_ENTER;                    if( ! ReleaseMutex(mutex) )                    {                    rc = GetLastError();                    return RC_UNLOCK_ERROR;                    }                    printf( "Mutex released.\n" );                    WAIT_FOR_ENTER;                    CloseHandle (mutex);                    printf( "Mutex deleted.\n" );                    printf( "Stop.\n" );                    return OK;                    }                    

在此,Linux 實(shí)現使用的是 System V Interprocess Communications(IPC)函數,如清單 1719 所示。


清單 17. 相應的 Linux 示例代碼 Process 1
#include <sys/sem.h>                    #include <sys/types.h>                    #include <sys/stat.h>                    #include <unistd.h>                    #define WAIT_FOR_ENTER    printf( "Press ENTER\n" );getchar()                    union semun {                    int                 val;   /* value for SETVAL             */                    struct semid_ds    *buf;   /* buffer for IPC_STAT, IPC_SET */                    unsigned short     *array; /* array for GETALL, SETALL     */                    struct seminfo     __buf;  /* buffer for IPC info          */                    };                    main()                    {                    int	       shr_sem;                    key_t 	       semKey;                    struct sembuf   semBuf;                    int		flag;                    union semun      arg;                    printf( "Inter Process Mutex test - Process 1.\n" );                    printf( "Start.\n" );                    flag = IPC_CREAT;                    if( ( semKey = (key_t) atol( "My Mutex" ) ) == 0 )                    return RC_INVALID_PARAM;                    flag |= S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;                    shr_sem  = (int) semget( semKey, 1, flag );                    if (shr_sem < 0)                    return RC_OBJECT_NOT_CREATED;                    arg.val = 1;                    if (semctl(shr_sem, 0, SETVAL, arg) == -1)                    return RC_OBJECT_NOT_CREATED;                    printf( "Mutex created.\n" );                    WAIT_FOR_ENTER;                    semBuf.sem_num = 0;                    semBuf.sem_op = -1;                    semBuf.sem_flg = SEM_UNDO;                    if (semop(shr_sem, &semBuf, 1) != 0)                    return RC_LOCK_ERROR;                    printf( "Mutex blocked.\n" );                    WAIT_FOR_ENTER;                    semBuf.sem_num = 0;                    semBuf.sem_op  = 1;                    semBuf.sem_flg = SEM_UNDO;                    if (semop(shr_sem, &semBuf, 1) != 0)                    return RC_UNLOCK_ERROR;                    printf( "Mutex released.\n" );                    WAIT_FOR_ENTER;                    semctl( shr_sem, 0, IPC_RMID );                    printf( "Mutex deleted.\n" );                    printf( "Stop.\n" );                    return 0;                    


清單 18. Win32 進(jìn)程間示例代碼 Process 2

#include <stdio.h>                    #include <windows.h>                    int main()                    {                    HANDLE      mutex;                    printf( "Inter Process Mutex test - Process 2.\n" );                    printf( "Start.\n" );                    SECURITY_ATTRIBUTES           sec_attr;                    sec_attr.nLength              = sizeof( SECURITY_ATTRIBUTES );                    sec_attr.lpSecurityDescriptor = NULL;                    sec_attr.bInheritHandle       = TRUE;                    mutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, “My Mutex");                    if( mutex == (HANDLE) NULL )                    return RC_OBJECT_NOT_CREATED;                    printf( "Mutex opened. \n");                    printf( "Try to block mutex.\n" );                    if ( WaitForSingleObject(mutex, INFINITE) == WAIT_FAILED)                    return RC_LOCK_ERROR;                    printf( "Mutex blocked. \n" );                    printf( "Try to release mutex.\n" );                    if( ! ReleaseMutex(mutex) )                    return RC_UNLOCK_ERROR;                    printf( "Mutex released.\n" );                    CloseHandle (mutex);                    printf( "Mutex closed. \n");                    printf( "Stop.\n" );                    return OK;                    }                    


清單 19. 相應的 Linux 示例代碼 Process 2

#include <stdio.h>                    #include <sys/sem.h>                    #include <sys/stat.h>                    #include <sys/ipc.h>                    #include <unistd.h>                    int main()                    {                    int             mutex;                    key_t           semKey;                    struct sembuf   semBuf;                    int             flag;                    int	       nRet=0;                    printf( "Inter Process Mutex test - Process 2.\n" );                    printf( "Start.\n" );                    flag = 0;                    if( ( semKey = (key_t) atol( "My Mutex" ) ) == 0 )                    return RC_INVALID_PARAM;                    flag |= S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;                    mutex = (int) semget( semKey, 1, flag );                    if (mutex == -1)                    return RC_OBJECT_NOT_CREATED;                    printf( "Mutex opened \n");                    printf( "Try to block mutex.\n" );                    semBuf.sem_num = 0;                    semBuf.sem_op = -1;                    semBuf.sem_flg = SEM_UNDO;                    if (semop(mutex, &semBuf, 1) != 0)                    return RC_LOCK_ERROR;                    printf( "Mutex blocked. \n");                    printf( "Try to release mutex.\n" );                    semBuf.sem_num = 0;                    semBuf.sem_op  = 1;                    semBuf.sem_flg = SEM_UNDO;                    if (semop(mutex, &semBuf, 1) != 0)                    return RC_UNLOCK_ERROR;                    printf( "Mutex released. \n");                    printf( "Mutex closed. \n");                    printf( "Stop.\n" );                    return 0;                    }                    





回頁(yè)首


結束語(yǔ)

在本文中,我們介紹了互斥 API 從 Win32 到 Linux 的映射。我們還引用了一系列互斥示例代碼來(lái)幫助您進(jìn)行 從 Win32 到 Linux 的遷移行動(dòng)。本系列的下一篇文章將闡述信號量。

補充聲明

IBM Corporation 1994-2005。保留所有權利。

本文檔中對 IBM 產(chǎn)品或服務(wù)的引用并不表示 IBM 想要讓它們在所有國家都可用。

IBM、eServer 和 pSeries 是 IBM Corporation 在美國和/或其他國家或地區的商標。

Microsoft、Windows、Windows NT 和 Windows 徽標是 Microsoft Corporation 在美國和/或其他國家或地區的商標或注冊商標。

Intel、Intel Inside(logos)、MMX 和 Pentium 是 Intel 公司在美國和/或其他國家或地區的商標。

UNIX 是 The Open Group 在美國和其他國家或地區的注冊商標。

Linux 是 Linus Torvalds 在美國和/或其他國家或地區的商標。

其他公司、產(chǎn)品或服務(wù)名稱(chēng)可能是其他公司的商標或服務(wù)標記。

信息都是“按原樣”發(fā)布,沒(méi)有任何類(lèi)型的保證。

所描述的所有的客戶(hù)示例只是為了說(shuō)明那些客戶(hù)如何使用 IBM 產(chǎn)品,以及它們可能獲得的結果。 不同客戶(hù)所得到的實(shí)際環(huán)境代價(jià)和性能特性可能會(huì )不同。

涉及非 IBM 產(chǎn)品的信息可從這些產(chǎn)品的供應商、其出版說(shuō)明或其他可公開(kāi)獲得的資料中獲取, 并不構成 IBM 對此產(chǎn)品的認可。非 IBM 價(jià)目及性能數字資源取自可公開(kāi)獲得的信息, 包括供應商的聲明和供應商的全球主頁(yè)。 IBM 沒(méi)有對這些產(chǎn)品進(jìn)行測試,也無(wú)法確認其性能的精確性、 兼容性或任何其他關(guān)于非 IBM 產(chǎn)品的聲明。有關(guān)非 IBM 產(chǎn)品性能的問(wèn)題應當向這些產(chǎn)品的供應商提出。

所有關(guān)于 IBM 未來(lái)方向或意向的聲明都可隨時(shí)更改或收回,而不另行通知, 它們僅僅表示了目標和意愿而已。聯(lián)系您本地的 IBM 辦公人員或者 IBM 授權的轉銷(xiāo)商, 以獲得特定的 Statement of General Direction 的全文。

這里所包含的信息可能陳述了預期的未來(lái)功能。上述信息并不打算作為對任何未來(lái)產(chǎn)品的特定性能級別、 功能或交付時(shí)間表的明確承諾。這樣的承諾只會(huì )在 IBM 產(chǎn)品中作出。這里出現的信息用于表明 IBM 當前的投資和發(fā)展活動(dòng),作為一種信任,來(lái)幫助我們的客戶(hù)規劃未來(lái)。

性能是在受控環(huán)境中使用標準的 IBM 基準程序測試和估算的。任何用戶(hù)實(shí)際的吞吐量或性能可能各不相同, 這取決于需要考慮的事項,例如用戶(hù)作業(yè)流中的多道程序設計總量、I/O 配置、存儲器配置和處理的工作負載。 因此,我們不能擔保,個(gè)別用戶(hù)所獲得的吞吐量或性能改善等同于這里所列的值。



參考資料



作者簡(jiǎn)介

 

Nam Keung 是 IBM 的一名高級程序員,他曾致力于 AIX 通信開(kāi)發(fā)、AIX 多媒體、SOM/DSOM 開(kāi)發(fā)和 Java 性能方面的工作。他目前的工作包括幫助獨立軟件提供商(Independent Software Vendors,ISV) 進(jìn)行應用程序設計、部署應用程序、性能調優(yōu)和關(guān)于 pSeries 平臺的教育。 您可以通過(guò) namkeung@us.ibm.com 與 Nam 聯(lián)系。


 

Chakarat Skawratananond 是 IBM eServer Solutions Enablement 組織的一名技術(shù)顧問(wèn), 在那里,他幫助獨立軟件開(kāi)發(fā)商在 IBM pSeries 平臺上使用他們的用于 AIX 和 Linux 的應用程序。 您可以通過(guò) chakarat@us.ibm.com 與 Chakarat 聯(lián)系。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Linux多線(xiàn)程簡(jiǎn)單聊天程序
Linux多線(xiàn)程編程小結
POSIX 多線(xiàn)程程序設計
Linux下的多線(xiàn)程編程
Linux之線(xiàn)程同步
pthread的各種同步機制
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久