That is not a thread. Linux man clone right at the start …

“clone, __clone2, clone3 - create a child process”

What you want is pthread_create (or similar)

There’s a bunch of not well documented dragons if you’re trying to treat a
child process as a thread. Use POSIX Threads, as pretty much anytime PG or
anything else Linux based says thread they’re talking about a POSIX Thread
environment.


On Wed, May 3, 2023 at 05:12 Michael J. Baars <
mjbaars1977.pgsql.hack...@gmail.com> wrote:

> Hi Peter,
>
> The shared common address space is controlled by the clone(2) CLONE_VM
> option. Indeed this results in an environment in which both the parent and
> the child can read / write each other's memory, but dynamic memory being
> allocated using malloc(3) from two different threads simulaneously will
> result in internal interference.
>
> Because libpq makes use of malloc to store results, you will come to find
> that the CLONE_VM option was not the option you were looking for.
>
> On Tue, 2 May 2023, 19:58 Peter J. Holzer, <hjp-pg...@hjp.at> wrote:
>
>> On 2023-05-02 17:43:06 +0200, Michael J. Baars wrote:
>> > I don't think it is, but let me shed some more light on it.
>>
>> One possibly quite important information you haven't told us yet is
>> which OS you use.
>>
>> Or how you create the threads, how you pass the results around, what
>> else you are possibly doing between getting the result and trying to use
>> it ...
>>
>> A short self-contained test case might shed some light on this.
>>
>>
>> > After playing around a little with threads and memory, I now know that
>> the
>> > PGresult is not read-only, it is read-once. The child can only read that
>> > portion of parent memory, that was written before the thread started.
>> Read-only
>> > is not strong enough.
>> >
>> > Let me correct my first mail. Making libpq use mmap is not good enough
>> either.
>> > Shared memory allocated by the child can not be accessed by the parent.
>>
>> Are you sure you are talking about threads and not processes? In the OSs
>> I am familiar with, threads (of the same process) share a common address
>> space. You don't need explicit shared memory and there is no such thing
>> as "parent memory" (there is thread-local storage, but that's more a
>> compiler/library construct).
>>
>>         hp
>>
>> --
>>    _  | Peter J. Holzer    | Story must make more sense than reality.
>> |_|_) |                    |
>> | |   | h...@hjp.at         |    -- Charles Stross, "Creative writing
>> __/   | http://www.hjp.at/ |       challenge!"
>>
> --

"Genius might be described as a supreme capacity for getting its possessors
into trouble of all kinds."
-- Samuel Butler

Reply via email to