John Machin <[email protected]> writes:
>> Now I'm confused. I want to know if it will be sufficient to wrap my
>> last_insert_rowid() call between BEGIN .. and END in order to make it
>> return the rowid that was last inserted by the same thread even if
>> multiple threads are using the same connection (but different cursors).
>>
>> As I understand Nuno, he is saying that this is sufficient. Igor OTOH is
>> saying that it's not sufficient, I need to use additional mechanism.
>
> As Igor pointed out, if you have multiple threads using the same
> connection, you ALREADY need mutexes or whatever to maintain atomicity.
> If you don't have that, yes you need to "use additional mechanism" BUT
> this constitutes an EXISTING bug in your code. Perhaps Nuno should have
> added a rider like "(presuming your existing code is not stuffed)".
Are you saying that I need to use mutexes or whatever in the following
program?
def thread1():
cur = conn.cursor()
for i in range(500):
cur.execute("INSERT INTO tab1 (no) VALUES(?)", i)
def thread2():
cur = conn.cursor()
for i in range(500):
cur.execute("INSERT INTO tab2 (no) VALUES(?)", i)
threading.Thread(target=thread1).start()
threading.Thread(target=thread2).start()
>> Where am I wrong?
>
> In wasting time on semantic confusion instead of implementing it and
> testing the bejaysus out of it.
When you are working with a multithreaded program, you can't even hope
to test a fraction of the possible state trajectories. Finding the
proper implementation by trial & error is therefore even more hopeless
than in a single threaded program.
Best,
-Nikolaus
--
»Time flies like an arrow, fruit flies like a Banana.«
PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users