div
eof
Expand Minimize
This topic has not yet been rated - Rate this topic

_lock_file

Updated: March 2009

Locks a FILE object to ensure consistency for threads accessing the FILE object concurrently.

void _lock_file(
   FILE* file
);
file

File handle.

The _lock_file function locks the FILE object specified by file. The underlying file is not locked by _lock_file. Use _unlock_file to release the lock on the file. Calls to _lock_file and _unlock_file must be matched in a thread.

Routine

Required header

_lock_file

<stdio.h>

For more compatibility information, see Compatibility in the Introduction.

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

Date

History

Reason

March 2009

Reworked.

Customer feedback.

Did you find this helpful?
(1500 characters remaining)

Community Additions

ADD
© 2013 Microsoft. All rights reserved.