---
name: "CURLSHOPT_LOCKFUNC"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/CURLSHOPT_LOCKFUNC"
---

# CURLSHOPT\_LOCKFUNC(3)

mutex lock callback

## NAME

CURLSHOPT\_LOCKFUNC - mutex lock callback

## SYNOPSIS

```
#include <curl/curl.h>
void lockcb(CURL *handle, curl_lock_data data, curl_lock_access access,
            void *clientp);
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_LOCKFUNC, lockcb);
```

## DESCRIPTION

Set a mutex lock callback for the share object, to allow it to get used by multiple threads concurrently. There is a corresponding *[CURLSHOPT\_UNLOCKFUNC(3)](/CURLSHOPT_UNLOCKFUNC/3.md)* callback called when the mutex is again released.

The *lockcb* argument must be a pointer to a function matching the prototype shown above. The arguments to the callback are:

*handle* is the currently active easy handle in use when the share object is intended to get used.

The *data* argument tells what kind of data libcurl wants to lock. Make sure that the callback uses a different lock for each kind of data.

*access* defines what access type libcurl wants, shared or single.

*clientp* is the private pointer you set with *[CURLSHOPT\_USERDATA(3)](/CURLSHOPT_USERDATA/3.md)*. This pointer is not used by libcurl itself.

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
extern void mutex_lock(CURL *handle, curl_lock_data data,
                       curl_lock_access access, void *clientp);
int main(void)
{
  CURLSHcode sh;
  CURLSH *share = curl_share_init();
  sh = curl_share_setopt(share, CURLSHOPT_LOCKFUNC, mutex_lock);
  if(sh)
    printf("Error: %s\n", curl_share_strerror(sh));
}
```

## AVAILABILITY

Added in curl 7.10.3

## RETURN VALUE

CURLSHE\_OK (zero) means that the option was set properly, non-zero means an error occurred. See *[libcurl-errors(3)](/libcurl-errors/3.md)* for the full list with descriptions.

## SEE ALSO

[**CURLSHOPT\_UNLOCKFUNC**(3)](/CURLSHOPT_UNLOCKFUNC/3.md), [**curl\_share\_cleanup**(3)](/curl_share_cleanup/3.md), [**curl\_share\_init**(3)](/curl_share_init/3.md), [**curl\_share\_setopt**(3)](/curl_share_setopt/3.md)
