diff options
author | Jack Sangdahl <[email protected]> | 2025-02-20 00:24:26 -0700 |
---|---|---|
committer | Jack Sangdahl <[email protected]> | 2025-02-20 00:24:26 -0700 |
commit | 762d832f4aa64cfbbc6db8a6b725f484c022c073 (patch) | |
tree | 6f83871e83bfe613777fda4ed7b0c0e9f7785942 /print_foobar_alternately.py | |
parent | f4a2492a0b821a6587e856b3a792b110d6bccf96 (diff) | |
download | leetcode-762d832f4aa64cfbbc6db8a6b725f484c022c073.tar.gz leetcode-762d832f4aa64cfbbc6db8a6b725f484c022c073.zip |
1115. print foobar alternately
Diffstat (limited to 'print_foobar_alternately.py')
-rw-r--r-- | print_foobar_alternately.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/print_foobar_alternately.py b/print_foobar_alternately.py new file mode 100644 index 0000000..d8b121a --- /dev/null +++ b/print_foobar_alternately.py @@ -0,0 +1,68 @@ +# 1115. Print FooBar Alternately +from threading import Semaphore + +""" +suppose you are given the following code: +class FooBar { +public void foo() { + for (int i = 0; i < n; i++) { + print("foo"); + } +} + +public void bar() { + for (int i = 0; i < n; i++) { + print("bar"); + } +} +} +the same instance of 'FooBar' will be passed to two different threads: thread +'a' will call 'foo()' and thread 'b' will call 'bar()'. modify the given +program to output "foobar" 'n' times. +""" + + +def printFoo(): + print("foo") + + +def printBar(): + print("bar") + + +class FooBar(object): + def __init__(self, n): + self.n = n + self.s_foo = Semaphore(1) + self.s_bar = Semaphore(0) + + def foo(self, printFoo): + """ + :type printFoo: method + :rtype: void + """ + for i in range(self.n): + self.s_foo.acquire() + # printFoo() outputs "foo". Do not change or remove this line. + printFoo() + self.s_bar.release() + + def bar(self, printBar): + """ + :type printBar: method + :rtype: void + """ + for i in range(self.n): + self.s_bar.acquire() + # printBar() outputs "bar". Do not change or remove this line. + printBar() + self.s_foo.release() + + +if __name__ == "__main__": + f1 = FooBar(1) + f2 = FooBar(2) + f1.foo() + f1.bar() + f2.foo() + f2.bar() |