Thread: Is there any way to request unique lwlock inside a background workerin PG9.4?

Is there any way to request unique lwlock inside a background workerin PG9.4?

From
Hubert Zhang
Date:
Hi all,

I want to init SHM in a background worker, which is supported in PG9.4. Also I need to use lwlock to protect the share memory inside the worker code.

RequestNamedLWLockTranche is the way to handle it, but it's not supported in PG 9.4, is there any way I could request an unique lock inside worker init code in PG 9.4? 

--
Thanks

Hubert Zhang
On Wed, Oct 17, 2018 at 3:49 PM Hubert Zhang <hzhang@pivotal.io> wrote:
>
> Hi all,
>
> I want to init SHM in a background worker, which is supported in PG9.4. Also I need to use lwlock to protect the
sharememory inside the worker code.
 
>
> RequestNamedLWLockTranche is the way to handle it, but it's not supported in PG 9.4, is there any way I could request
anunique lock inside worker init code in PG 9.4?
 
>

You might want to look at section "Shared Memory and LWLocks" in the docs [1].

[1] - https://www.postgresql.org/docs/9.4/static/xfunc-c.html

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com


Hi Amit

The section "Share Memory and LWLocks" describe the AddinShmemInitLock which is used to protect the ShmemInitStruct() when backend workers initialize their shm.  My requirement is to how to protect the shm access within the bgworkers(not at init stage). This lock should be bgworkers specific.

On Wed, Oct 17, 2018 at 7:51 PM Amit Kapila <amit.kapila16@gmail.com> wrote:
On Wed, Oct 17, 2018 at 3:49 PM Hubert Zhang <hzhang@pivotal.io> wrote:
>
> Hi all,
>
> I want to init SHM in a background worker, which is supported in PG9.4. Also I need to use lwlock to protect the share memory inside the worker code.
>
> RequestNamedLWLockTranche is the way to handle it, but it's not supported in PG 9.4, is there any way I could request an unique lock inside worker init code in PG 9.4?
>

You might want to look at section "Shared Memory and LWLocks" in the docs [1].

[1] - https://www.postgresql.org/docs/9.4/static/xfunc-c.html

--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com


--
Thanks

Hubert Zhang

Re: Is there any way to request unique lwlock inside a backgroundworker in PG9.4?

From
Andres Freund
Date:
Hi,

On 2018-10-17 23:11:26 +0800, Hubert Zhang wrote:
> The section "Share Memory and LWLocks" describe the AddinShmemInitLock which
> is used to protect the ShmemInitStruct() when backend workers initialize
> their shm.  My requirement is to how to protect the shm access within the
> bgworkers(not at init stage). This lock should be bgworkers specific.

Rereead the page please. After you RequestAddinLWLocks() during
initialization, you can use LWLockAssign() to get an lwlock. Which you
then can use as is your pleasure.

Greetings,

Andres Freund


Thanks a lot. 

On Wed, Oct 17, 2018 at 11:21 PM Andres Freund <andres@anarazel.de> wrote:
Hi,

On 2018-10-17 23:11:26 +0800, Hubert Zhang wrote:
> The section "Share Memory and LWLocks" describe the AddinShmemInitLock which
> is used to protect the ShmemInitStruct() when backend workers initialize
> their shm.  My requirement is to how to protect the shm access within the
> bgworkers(not at init stage). This lock should be bgworkers specific.

Rereead the page please. After you RequestAddinLWLocks() during
initialization, you can use LWLockAssign() to get an lwlock. Which you
then can use as is your pleasure.

Greetings,

Andres Freund


--
Thanks

Hubert Zhang