_lock_file
锁定 FILE
对象,以确保一致性线程同时访问 FILE
对象。
语法
void _lock_file( FILE* file );
参数
file
文件句柄。
备注
_lock_file
函数锁定由 file
指定的 FILE
对象。 基础文件未被 _lock_file
锁定。 使用 _unlock_file
释放对该文件的锁定。 调用 _lock_file
和 _unlock_file
必须在线程中匹配。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
_lock_file |
<stdio.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// 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 );
}
...
First
Second
First
Second
Third
Second
Third
Second
...
FSiercsotn
dF
iSrescto
nFdi
rSsetc
oFnidr
sSte
cFoinrds
tS
eFciornsdt
另请参阅
文件处理
%>
%>
_unlock_file