_lock_file
鎖定 FILE 物件確保並行存取 FILE 物件的執行緒的一致性。
void _lock_file(
FILE* file
);
參數
- file
檔案控制代碼。
備註
_lock_file 函式鎖定 file指定的 FILE 物件。 基礎檔案未由 _lock_file鎖定。 使用 _unlock_file 釋放在檔案的鎖定。 在執行緒必須與呼叫 _lock_file 和 _unlock_file 。
需求
常式 |
必要的標頭 |
---|---|
_lock_file |
<stdio.h> |
如需更多關於相容性的資訊,請參閱入門介紹中的 相容性 (Compatibility) 。
範例
// crt_lock_file.c
// This example creates multiple threads that write to standard output
// concurrently, first with _file_lock, then without.
#include <stdio.h>
#include <process.h>// _beginthread
#include <windows.h>// HANDLE
void Task_locked( void* str )
{
for( int i=0; i<1000; ++i )
{
_lock_file( stdout );
for( char* cp = (char*)str; *cp; ++cp )
{
_fputc_nolock( *cp, stdout );
}
_unlock_file( stdout );
}
}
void Task_unlocked( void* str )
{
for( int i=0; i<1000; ++i )
{
for( char* cp = (char*)str; *cp; ++cp )
{
fputc( *cp, stdout );
}
}
}
int main()
{
HANDLE h[3];
h[0] = (HANDLE)_beginthread( &Task_locked, 0, "First\n" );
h[1] = (HANDLE)_beginthread( &Task_locked, 0, "Second\n" );
h[2] = (HANDLE)_beginthread( &Task_locked, 0, "Third\n" );
WaitForMultipleObjects( 3, h, true, INFINITE );
h[0] = (HANDLE)_beginthread( &Task_unlocked, 0, "First\n" );
h[1] = (HANDLE)_beginthread( &Task_unlocked, 0, "Second\n" );
h[2] = (HANDLE)_beginthread( &Task_unlocked, 0, "Third\n" );
WaitForMultipleObjects( 3, h, true, INFINITE );
}