次の方法で共有


_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>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

// 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 );
}
  
  
  

同等の .NET Framework 関数

System::IO::FileStream::Lock

参照

関連項目

ファイル処理

_creat、_wcreat

_open、_wopen

_unlock_file