У вас есть очевидная опечатка в вашем printf("main/n");
, а не printf("main\n");
(или просто puts("main");
), но это деталь, а не причина, по которой ваша программа никогда не завершит
в vlakno1 вы создаете тупик, выполняя:
if(poc_precitanych == 0){
pthread_exit(NULL);
}
, потому что вы не разблокируете мьютекст, должно быть
if(poc_precitanych == 0){
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
у вас та же проблема в vlakno2 [1117 ]:
if(pocet_pisanych == 0){
pthread_exit(NULL);
}
должно быть
if(pocet_pisanych == 0){
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
Следующее также странно:
pocet_pisanych = fwrite(a, sizeof(char),poc_precitanych, stdout);
if(pocet_pisanych == 0){
pthread_exit(NULL);
}
даже это не невозможно, трудно иметь запись на stdou безуспешно. Таким образом, единственный шанс для вас выйти из этого цикла - получить poc_precitanych
со значением 0
Дополнительное замечание, вы #define V 300
, но вы делаете char a[300];
, пока используете V в другом месте. Лучше сделать char a[V];
или использовать sizeof(a)
в другом месте без определения V
Примеры выполнения после изменений:
/tmp % ./a.out < /dev/null
main
vlakno 1vlakno 2
читать нечего, поэтому poc_precitanych
значения 0 и два потока заканчиваются, но
/tmp % echo "1 2 3" | ./a.out
main
vlakno 1vlakno 1vlakno 21 2 3
^C
Использовать cProfile:
python -m cProfile yourscript.py
Протестировано на Windows в Python 2.4 - вы можете попробовать сами.
>>> import time
>>> ## Built-in module
>>> def testTime():
now = time.clock() # use time.time() on unix-based systems
import math
print time.clock() - now
>>> testTime()
7.54285810167e-006
>>> ## My own module
>>> def testTime():
now = time.clock()
import myBuiltInModule # Not its actual name ;-)
print time.clock() - now
>>> testTime()
0.00253174635324
>>> testTime()
3.70158777141e-006
Таким образом, существует большая разница между кэшированными модулями и теми, которые вводятся с нуля. Чтобы проиллюстрировать это, мы можем перезагрузить модуль:
>>> def testTime():
now = time.clock()
reload(myBuiltInModule )
print time.clock() - now
>>> testTime()
0.00250017809526
Вы можете проверить этот забег
$ time python -c "import math"
Однако, что бы это вам помогло? Импорт происходит только один раз и почти никогда не будет бутылочным горлышком. Импорт одного и того же модуля снова и снова не будет выполняться значительно медленнее, чем импорт одного раза, поскольку Python отслеживает, какие модули уже были импортированы.
Чего вы на самом деле пытаетесь достичь?
Это не плагин Rails, но http://www.owasp.org/ - хорошее место для начала.
$ python -m cProfile -o myscript.prof myscript.py
$ python gprof2dot.py -o myscript.dot -f pstats myscript.prof
$ dot -Tpng -o profile.png prof_runtest.dot -Gbgcolor=black